是否可以在将生成OR条件而不是AND的多列上编写lambda左连接?
var query = context.table1.GroupJoin(
context.table2,
x => new { JoinCol1 = x.CustomerCode, JoinCol2 = x.CustomerName},
y => new { JoinCol1 = y.Code, JoinCol2 = y.Name},
(x, y) => new {
firstTable = x,
secondTable = y
}).SelectMany(
x => x.OrganizationAddress.DefaultIfEmpty(),
(x, y) => {
x.firstTable.field1,
x.firstTable.field2,
y.Field3,
y.Field4
}
)
这将生成以下查询
SELECT t1.filed1, t1.field2, t2.field3, t2.field4
FROM table1
LEFT JOIN table2 ON table1.CustomerCode = table2.Code
AND table1.CustomerName = table2.Name
我想获得相同的查询,但我希望它不是OR条件,而是OR:
SELECT t1.filed1, t1.field2, t2.field3, t2.field4
FROM table1
LEFT JOIN table2 ON table1.CustomerCode = table2.Code
OR table1.CustomerName = table2.Name
有没有办法做到这一点?
编辑:版本-EF 6.2.0
答案 0 :(得分:1)
LINQ联接运算符(Join
,GroupJoin
)仅支持等联接。所有其他联接类型都必须实现为相关子查询。
对于有问题的连接,您只需使用替代的LINQ 左外部连接模式-将SelectMany
与DefaultIfEmpty()
相关联。像这样:
var query = context.table1.SelectMany(
t1 => context.table2
.Where(t2 => t1.CustomerCode == t2.Code || t1.CustomerName == t2.Name)
.DefaultIfEmpty(),
(t1, t2) => new
{
t1.field1,
t1.field2,
t2.Field3,
t3.Field4
});