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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:39:01