Linq to SQL嵌套IN FROM查询

时间:2008-12-15 09:10:55

标签: linq-to-sql

任何人都可以告诉我如何编写像

这样的嵌套SQL查询

SELECT * FROM X WHERE X.ID IN(SELECT Y.XID FROM Y WHERE .....)

在LINQ中

3 个答案:

答案 0 :(得分:8)

你可以尝试:

var yIds = from y in dataContext.Y
           where ...
           select y.XId;

var query = from x in dataContext.X
            where yIds.Contains(x.Id)
            select x;

我不知道它是否会起作用 - 你不想只是做一个连接的任何理由?例如:

var query = from x in dataContext.X
            join y in dataContext.Y.Where(...) on x.Id equals y.Xid
            select x;

答案 1 :(得分:8)

要在sql中执行IN,您需要使用Linq中的Contains函数。

例如:

var query = from x in GetX()
            where (from y in GetY() select y.xID).Contains(x.xID)
            select x;

如果你愿意,你也可以单独定义内部linq查询,这有点可读

答案 2 :(得分:6)

我在寻找LINQ to SQL的NOT IN解决方案。感谢这个问题,我能够谷歌正确的事情并找到这篇博文:The NOT IN clause in LINQ to SQL

C#

NorthwindDataContext dc = new NorthwindDataContext();
var query =
    from c in dc.Customers
    where !(from o in dc.Orders
            select o.CustomerID)
           .Contains(c.CustomerID)
    select c;

VB.net

Dim db As New NorthwinDataContext()
Dim query = From c In dc.Customers _
            Where Not (From o in dc.Orders _
                       Select o.CustomerID).Contains(c.CustomerID) _
            Select c