C# 如何在linq to EF中有两个表的IN子句?
我正在编写一个查询,以选择表a中的一些数据,其中C1列位于表B中C2列中 在SQL中很容易进行这样的查询。代码如下所示:C# 如何在linq to EF中有两个表的IN子句?,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在编写一个查询,以选择表a中的一些数据,其中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.
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”子句为某些数据的数组而不是表设置条件的问题。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;
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;
为什么不干脆加入A和B呢
var res = ctx.A.Join(ctx.B, q => q.C1, q => q.C2, (q, w) => q);
为什么不干脆加入A和B呢
var res = ctx.A.Join(ctx.B, q => q.C1, q => q.C2, (q, w) => q);
也许我的朋友可以帮助你?也许我的朋友可以帮助你?