Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ中使用多列编写exists子查询?_C#_Sql Server_Linq - Fatal编程技术网

C# 如何在LINQ中使用多列编写exists子查询?

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

我正在尝试编写一个类似以下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 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;