2009-08-15 10 views
1

Existe-t-il un équivalent de la clause IN de SQL dans LinqToSql?LinqToSql clause "in"

Par exemple, comment la requête suivante se fait dans LinqToSql:

select * from users 
left join groups on groups.pkid 
in (select group_id from user_group 
    where user_group.userid = users.userid) 

Répondre

3

SQL 'dans' équivalent en LINQ et LINQ to SQL est [arrayOrListOrOtherEnumerable] .Contains (entity.someField).

le plus proche [fonctionnalité sage] équivalent de votre exemple de requête serait:

from usr in dc.Users 
join ug in dc.UserGroups on usr.UserID equals ug.UserID 
join gr in dc.Group on ug.GroupID equals gr.PkID 
select new { usr, gr } 

Je suis parti sur la gauche rejoindre à partir de votre requête depuis la façon dont il est écrit oblige effectivement la jointure gauche dans une jointure interne. Toutefois, si vous souhaitez effectuer une jointure à gauche dans une autre situation, cela se fait en rejoignant une sous-requête ajoutée par un .DefaultIfEmtpy.

Une excellente ressource sur des constructions communes comme celle-ci est Damien Garde de « Les LINQ antisèche » - un PDF d'une page imprimable qui peut être téléchargé sur son blog à http://damieng.com/blog/2009/08/12/linq-to-sql-cheat-sheet

+0

Merci, c'est exactement ce que je cherchais ! –

Questions connexes