我正在写一个查询,以便选择表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”子句,以便为某些数据而不是表的数组设置条件。
答案 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);