首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让linq to EF中的IN子句有两个表?

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

Stack Overflow用户
提问于 2019-06-10 17:57:22
回答 2查看 67关注 0票数 0

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

在SQL中使用这样的查询是很容易的。代码如下所示:

代码语言:javascript
复制
select * from A where C1 in (Select C2 from B)

我尝试的代码是这样的:

代码语言:javascript
复制
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;

但是有一个错误是这样写的:

int严重性代码说明项目文件行抑制状态错误CS1929 'IQueryable<>‘不包含'Contains’的定义,最佳扩展方法重载'AsyncEnumerable.Contains(IAsyncEnumerable,int)‘需要类型为'IAsyncEnumerable’"ProjectName“"ClassFileAddress”261 Active的接收器

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

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 02:49:23

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

代码语言:javascript
复制
var ans = from a in A
          where (from b in B select b.C2).Contains(a.C1)
          select a;

您也可以使用join来实现相同的结果:

代码语言:javascript
复制
var ans = from a in A
          join b in B on a.C1 equals b.C2
          select a;
票数 1
EN

Stack Overflow用户

发布于 2019-06-11 02:59:58

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

代码语言:javascript
复制
var res = ctx.A.Join(ctx.B, q => q.C1, q => q.C2, (q, w) => q);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56524134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档