如何在linq to EF中有两个表的IN子句?

时间:2019-06-10 09:57:22

标签: c# entity-framework linq

我正在写一个查询,以便选择表B中的数据,其中表C的列C1在表B的列C2中。

在SQL中进行这样的查询很容易。代码是这样的:

select * from A where C1 in (Select C2 from B)

我尝试过的代码如下:

var InCluse = from p in B select new { p.C2 };
var query = from p in (from q in A
                       where InClause.Contains(q.C1)
                       select q)
            select p;

但是有一个错误提示:

  

严重性代码描述项目文件行抑制状态   错误CS1929'IQueryable <>'不包含'Contains'的定义,最佳扩展方法重载'AsyncEnumerable.Contains(IAsyncEnumerable,int)'要求类型为'IAsyncEnumerable'的接收者“ ProjectName”“ ClassFileAddress” 261有效

类似我的问题,但是这个问题与其他问题的区别在于,其他问题是关于使用“ IN”子句,以便为某些数据而不是表的数组设置条件。

2 个答案:

答案 0 :(得分:1)

SQL可以从字面上翻译成LINQ:

var ans = from a in A
          where (from b in B select b.C2).Contains(a.C1)
          select a;

您还可以使用join完成相同的结果:

var ans = from a in A
          join b in B on a.C1 equals b.C2
          select a;

答案 1 :(得分:1)

为什么不简单地加入A和B?

var res = ctx.A.Join(ctx.B, q => q.C1, q => q.C2, (q, w) => q);