请求将含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
相关产品推荐
相关产品推荐

