我想在动态Linq 中进行左外连接,但我无法正确使用语法。在SQL中它看起来像这样:
SELECT col1, col2, col3 from tableA as a
LEFT OUTER JOIN tableB as b on a.col1 = b.col1 AND a.col2 = b.col2 AND a.col3 = 1
在动态linq中我尝试了这个:
dbContext.tableA
.GroupJoin(tableB, col1 == tableA.col1 && col2 == tableA.col2 && col3 == 1)
.Select('new(col1, col2, col3)');
第三个连接参数(列)只是硬编码,因为它不是来自tableB。 什么是正确的linq代码?
编辑:这不是一个重复的问题。我正在寻找适用于动态LINQ的语法,而不是普通的linq
答案 0 :(得分:0)
通常对于连接,特别是对于左连接,我使用语句语法。
未经测试,但看起来像这样:
var result = from a in tableA
from b in tableB.Where(x => x.col1 == a.col1 && x.col2 == a.col2 && a.col3 == 1).DefaultIfEmpty()
select new { a.col1, a.col2, b.col3 };
通过对tableB的连接执行.DefaultIfEmpty(),它会将其视为左连接。如果省略.DefaultIfEmpty(),那么它将表现得像内部联接。
答案 1 :(得分:0)
您可以在GitHub上找到便于使用Dynamic Linq进行左联接的扩展:https://github.com/SikeyMael/LinqHelper