LinqToSql“in”子句

时间:2009-08-15 14:38:42

标签: sql-server linq-to-sql

在LinqToSql中是否有等效的SQL IN子句?

例如,如何在LinqToSql中完成以下查询:

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

1 个答案:

答案 0 :(得分:3)

Linq和Linq-to-SQL中的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附加的子查询来完成。

像这样的常见结构的优秀资源是Damien Guard的'linq备忘单' - 可打印的单页PDF,可以从他的博客http://damieng.com/blog/2009/08/12/linq-to-sql-cheat-sheet下载