请求将指定SQL查询转换为Linq Lambda表达式
SQL转Linq Lambda表达式实现
对应第一种IN子查询的SQL写法
// 简洁版实现 var result1 = dbContext.Table1 .Where(a => dbContext.Table1 .Where(b => b.Col2 == "Condition") .Join(dbContext.Table2, b => b.Col1, c => c.Col1, (b, c) => b.Col1) .Contains(a.Col1)) .ToList();
对应第二种多表隐式连接的SQL写法
这种写法等价于多表内连接,以下两种Lambda实现方式都可以:
// 用Join嵌套实现 var result2 = dbContext.Table1 .Join(dbContext.Table1, a => a.Col1, b => b.Col1, (a, b) => new { a, b }) .Join(dbContext.Table2, ab => ab.b.Col1, c => c.Col1, (ab, c) => ab.a) .Where(ab => ab.b.Col2 == "Condition") .ToList();
// 用SelectMany实现(更贴近原SQL隐式连接逻辑) var result2 = dbContext.Table1 .SelectMany(a => dbContext.Table1 .Where(b => b.Col1 == a.Col1 && b.Col2 == "Condition") .SelectMany(b => dbContext.Table2 .Where(c => c.Col1 == b.Col1) .Select(c => a))) .Distinct() // 避免隐式连接产生的重复数据 .ToList();
关键说明
Contains方法对应SQL中的IN子查询逻辑Join方法用于处理表间关联,参数依次为关联表、左表关联字段、右表关联字段、关联结果投影- 隐式连接用
SelectMany实现时,建议添加Distinct避免重复记录
内容的提问来源于stack exchange,提问作者user9127337
相关产品推荐
相关产品推荐

