Linq to Entity Framework:多个左外连接创建完整外连接

Linq to Entity Framework: Multiple left outer joins create full outer

找不到很好的例子,可能是我找错了:

我有一堆通过表达式语法连接的表,如果有值,我想再左外连接两个,否则 return NULL。

所以 sql 看起来像这样:

select              *
from                table1 mr
left outer join     table2 on table1
left outer join     table3 on table2
left outer join     table4 on table3
where               mr.id = 1234

所以左连接没有问题,语法如下:

join oiA in query1 on organisation.Id equals oiA.Organisationid into qOrgInhA
from oiA in qOrgInhA.DefaultIfEmpty()

但是,一旦我根据 oiA 添加其他表,Entity Framework 就会生成一个交叉联接,而不是第二个左外部联接。

根据我的阅读,GroupJoin 可能是解决方案,但我真的找不到很好的例子,我找到的大多数例子只有 2 个表。

还是我做错了什么?

在方法语法中,多个左连接可以这样完成:

var result = table1
.GroupJoin(table2, o => o.Key, i => i.FKey, (t1, t2) => new 
{ 
    t1, 
    t2.GroupJoin(table3, o => o.Key, i => i.FKey, (_t2, t3) => new 
    {
        _t2,
        t3
    })
});

entity framework 生成的结果查询将类似于:

select * from table1
left outer join table2 on table1.Key = table2.FKey
left outer join table3 on table2.Key = table3.FKey

编辑: 我对查询语法有点不稳定,但在 select:

中进行第二次连接的想法相同
 var result = from t1 in table1
 join t2 in table2 on t1.Key equals t2.FKey into joinresult
 select new
 {
     t1,
     from jr in joinresult
     join t3 in table3 on jr.Key eq t3.FKey into joinresult2
     select new
     {
         jr,
         joinresult2
     }
 }