c# -多个属性的动态Linq左外连接

本文关键字:Linq 连接 动态 属性 | 更新日期: 2023-09-27 18:04:10

我想做左外连接在动态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代码是什么?

EDIT:这不是一个重复问题。我正在寻找与动态LINQ工作的语法,而不是与正常的LINQ

c# -多个属性的动态Linq左外连接

对于连接,特别是左连接,我通常使用语句语法。

未测试,但看起来像这样:

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(),那么它将表现得像一个内部连接。

你可以找到一个扩展,方便左连接与动态Linq在GitHub: https://github.com/SikeyMael/LinqHelper