如何在Linq中编写带OR条件的INNER JOIN查询
实现带OR关联条件的LINQ查询方案
方法1:使用查询语法结合Where条件(最直观,适配绝大多数ORM)
常规LINQ的join语法默认只支持AND拼接的等值关联,要实现OR逻辑的关联,直接通过双from+Where的方式写即可,ORM会自动将其解析为带OR条件的INNER JOIN:
var query = from t1 in dbContext.Table1 from t2 in dbContext.Table2 where t1.Id == t2.value1 || t1.Id == t2.value2 select new { t1.Id, t2.value3 };
生成的SQL和你需要的结构完全一致。
方法2:方法语法实现
如果习惯用链式方法语法,用SelectMany配合Where即可:
var query = dbContext.Table1 .SelectMany( t1 => dbContext.Table2.Where(t2 => t1.Id == t2.value1 || t1.Id == t2.value2), (t1, t2) => new { t1.Id, t2.value3 } );
注意事项
- 该写法在EF Core、EF6、LINQ to SQL等主流LINQ ORM提供器中都能正确生成目标SQL,不需要额外配置
- 不要尝试用常规
Join方法的关联键重载实现OR逻辑,Join方法的关联是基于键相等匹配,默认只能生成AND拼接的等值关联条件
内容的提问来源于stack exchange,提问作者user3776749
相关产品推荐
相关产品推荐

