2009-08-15 2 views
1

Есть ли эквивалент предложения SQL IN в LinqToSql?LinqToSql "in" статья

Например, как бы следующий запрос будет сделано в LinqToSql:

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

ответ

3

SQL, 'в' эквивалент в Linq и Linq-на-SQL является [arrayOrListOrOtherEnumerable] .Contains (entity.someField).

Ближайший [функциональность мудрой] эквивалент запроса выборки будет:

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 } 

я ушел из левых присоединиться из вашего запроса, так как она написана фактически заставляет левый вступить в внутреннее соединении. Однако, если вы в какой-то другой ситуации хотите сделать левое соединение, это делается путем присоединения к подзапросу, добавленному .DefaultIfEmtpy.

Отличный ресурс на общих конструкциях, как это Дэмиена стража «LINQ шпаргалку» - печатаемый один-пейджера PDF, который можно загрузить из своего блога на http://damieng.com/blog/2009/08/12/linq-to-sql-cheat-sheet

+0

Спасибо, это именно то, что я искал ! – 2009-08-15 15:05:29