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

如何将带OR条件的SQL JOIN语句转换为C# Lambda语法

实现方案

注意你原SQL中的t1.Some_Other_Column = NULL属于错误写法,标准SQL中NULL值比较需要用IS NULL,转换为C#逻辑时对应== null即可,EF会自动生成正确的IS NULL语法。

LINQ 内置的Join()方法仅支持等值关联,无法直接实现带OR逻辑的自定义关联条件,推荐使用SelectMany + Where的组合实现,代码如下:

context.Table1
    // 自定义JOIN关联条件
    .SelectMany(
        t1 => context.Table2.Where(t2 => 
            t1.Table1_ID == t2.Table1_ID 
            || t1.Some_Other_Column == null
        ),
        (t1, t2) => new { t1, t2 }
    )
    .Select(x => new 
    {
        x.t1.first_column,
        x.t1.last_column,
        x.t2.first_column,
        // 其余属性
    }).ToList();

可选:LINQ 查询语法实现

如果更习惯类SQL的写法,可以用查询语法实现,可读性更高,生成的SQL和上面的Lambda写法完全一致:

var res = (
    from t1 in context.Table1
    from t2 in context.Table2
    where t1.Table1_ID == t2.Table1_ID || t1.Some_Other_Column == null
    select new 
    {
        t1.first_column,
        t1.last_column,
        t2.first_column,
        // 其余属性
    }
).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:09:02