C# 如何在LINQ中使用多列编写exists子查询?
我正在尝试编写一个类似以下SQL的linq查询:C# 如何在LINQ中使用多列编写exists子查询?,c#,sql-server,linq,C#,Sql Server,Linq,我正在尝试编写一个类似以下SQL的linq查询: SELECT * FROM Table1 WHERE EXISTS ( SELECT 1 FROM Table2 WHERE Table1.ColA = Table2.ColA AND Table1.ColB = Table2.ColB ) 除了表2之外,我之前已经从数据库中获得了一个对象列表 我知道当涉及一列时,如何使用contains在子查询中使用数据库外的对象列表模拟SQL: var query = from t1
SELECT * FROM Table1
WHERE EXISTS (
SELECT 1 FROM Table2
WHERE Table1.ColA = Table2.ColA
AND Table1.ColB = Table2.ColB
)
除了表2之外,我之前已经从数据库中获得了一个对象列表
我知道当涉及一列时,如何使用contains在子查询中使用数据库外的对象列表模拟SQL:
var query = from t1 in db.Table1
where MyObjList.Select(o => o.Field1).Contains(t1.Col1)
select t1;
我想我可以加入Linq。但这样做行吗?我希望避免对列表中的每个对象进行数据库调用。尝试以下操作:
var query = from t1 in db.Table1
join t2 in db.Table2 on t1.ColA equals t2.ColA
Where t1.ColB == t2.ColB
Select t1;
还是不加入
var query = from t1 in db.Table1
from t2 in db.Table2
Where t1.ColA == t2.ColA && t1.ColB == t2.ColB
Select t1;
如果它是纯SQL,那么这就可以实现。但我使用的是一个现有的对象列表,该列表为集合中的每个对象生成一个查询。取而代之的是,我使用了第二个contains示例来提取更大的集合,这是一个SQL调用,然后在像您这样的Linq查询中使用两个对象列表来进一步过滤它。
var q = from t1 in db.Table1
from t2 in db.Table2.Where(x => x.ColA == t1.ColA && x.ColB == t1.ColB)
select t1;