2010-02-24 4 views
0

J'ai sur mon EF Schema une relation * - * (conçue par une table du milieu avec 2 touches). Quand je veux filtrer chaque (par exemple: Je veux tous les segments du marché filtré par une fonction), j'exécuter cette requête:Linq to Entities: relation * - *

var requete = from mkt in ent.MARKETSEGMENT_MKT 
where mkt.FUNCTION2_FUN.Where(fu => fu.FUN_ID == FunId).FirstOrDefault().FUN_ID == FunId 

Il travaille, mais il est laid. Comment créer une bonne requête pour une relation filtrée * - *?

Merci

+0

vous devriez utiliser une jointure sur votre relation many-to-many ... –

+0

@Tony, je ne suis pas du tout d'accord avec cela: http://blogs.teamb.com/craigstuntz/2010/01/13/38525/ –

Répondre

0

It's almost never correct to use join dans LINQ to Entities (ou LINQ to SQL).

Puisque vous ne spécifiez pas vos noms d'ensembles d'entités, je dois deviner. J'espère que cela a du sens:

var requete = from fun in ent.FUNCTION 
       where fun.FUN_ID == FunId 
       from mkt in fun.MARKETSEGMENT_MKT 
       select mkt; 

Le point important ici est que vous avez une association deux voies entre FUNCTION et MARKETSEGMENT. Utilise le!

+0

Merci, je comprends mieux le concept maintenant :) –

0

utilisez la méthode Join.

cet exemple de petit nerddinner.com pourrait aider:

var dinners = from dinner in FindUpcomingDinners() 
     join i in db.NearestDinners(latitude, longitude) 
     on dinner.DinnerID equals i.DinnerID 
     select dinner; 
+0

J'essaye avec une jointure mais sans succès var requete = de mkt dans ent.MARKETSEGMENT_MKT joindre fun dans ent.FUNCTION2_FUN sur mkt.MKT_ID est égal à fun.MARKETSEGMENT_MKT. <= Ce que je peux insérer ici, c'est un IEnumerable et pas un Id –

+0

peut-être essayer ce lien: http://www.hookedonlinq.com/LINQtoSQL5MinuteOverview.ashx – Stefanvds