C# - Dynamic Linq在多个属性上保留外连接

时间:2016-08-25 12:22:49

标签: c# sql linq dynamic-linq

我想在动态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

2 个答案:

答案 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