将子查询SQL与LINQ相关联

时间:2011-08-08 08:23:41

标签: sql .net linq subquery correlated-subquery

select * 
  from Table1 
 where TC in (select TC 
                from Table2 
               where Application in ('AAA'))`

帮助我将上述查询转换为LINQ。

2 个答案:

答案 0 :(得分:1)

如果没有where Application in ('AAA')部分,这看起来很简单:

from t1 in db.Table1s
where db.Table2s.Select(t2 => t2.TC).Contains(t1.TC)
from t1 in db.Table1s

更新(我多么不对劲!)

List<string> myCollection = new List<string> { "AAA" };
from t1 in db.Table1s
where db.Table2s.Where(t2 => myCollection.Contains(t2.Application)).Select(t2 => t2.TC).Contains(t1.TC)
from t1 in db.Table1s

应该使用代码内集合。

答案 1 :(得分:0)

尝试这种方式

LINQ中没有'In'子查询(到目前为止)。

使用'Any'运算符完成同样的事情。

例如:

与员工位于同一城市的所有客户

   from c in db.Customers
   where db.Employees.Any(e => e.City == c.City)
   select c;

.Any()运算符的左侧是子查询。

query.Any(x => predicate)

等同于SQL

EXISTS(
    SELECT *
    FROM query
    WHERE predicate
    )

了解更多详情

http://social.msdn.microsoft.com/Forums/en-AU/linqprojectgeneral/thread/360166df-4e50-44d8-812a-04b5bc4fedd1