You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将含IN、DISTINCT关键字的SQL子查询转换为LINQ格式

把你的SQL查询转换成LINQ的解决方案

嘿,我来帮你搞定这个SQL转LINQ的问题!先理清楚你的原查询逻辑:你要从Main表中筛选出所有ApplicationId出现在tblRecomSanctionedDetail表中、由UpdateByUserId = 1011用户更新过的唯一ApplicationId集合里的记录对吧?

下面给你两种常用的LINQ写法,和你的SQL逻辑完全匹配:

1. 查询语法(和SQL结构最接近,易读性高)

这种写法和你原SQL的结构几乎一一对应,很容易理解:

var queryResult = from m in db.Main
                  where (from r in db.tblRecomSanctionedDetail
                        where r.UpdateByUserId == 1011
                        select r.ApplicationId).Distinct().Contains(m.ApplicationId)
                  select m;

2. 方法语法(更简洁,链式调用风格)

如果你习惯链式调用的写法,可以拆成两步,逻辑同样清晰:

// 先获取符合条件的唯一ApplicationId集合
var validAppIds = db.tblRecomSanctionedDetail
                    .Where(r => r.UpdateByUserId == 1011)
                    .Select(r => r.ApplicationId)
                    .Distinct();

// 再筛选Main表中匹配的记录
var queryResult = db.Main.Where(m => validAppIds.Contains(m.ApplicationId));

小提示

  • 这两种写法在EF/EF Core中都会被翻译成和你原SQL几乎一致的数据库查询,不会把全表数据拉到内存再过滤,性能上和原SQL持平。
  • 如果你的ApplicationId字段有索引,查询效率会更高。
  • 要是想验证生成的SQL是否符合预期,可以用EF的日志功能或者EF Core的ToQueryString()方法查看最终执行的SQL语句。

内容的提问来源于stack exchange,提问作者Laxman Rathod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:39:56