如何将带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
相关产品推荐
相关产品推荐

