如何在2个谓词到2个表上做LINQ左连接?


SELECT *
FROM A
LEFT JOIN B ON A.HelloID = B.HelloID 
LEFT JOIN C ON A.BusyID = C.BusyID AND B.MemID = C.MemID 

我试过以下方法:

var list = from A in this.A
join B in this.B
on A.HelloID equals B.HelloID into bgj
from subb in bgj.DefaultIfEmpty()
join C in this.C
on B.MemID equals C.MemID into cgj
from subc in cgj.DefaultIfEmpty()
on A.BusyID equals C.BusyID into cgj2
from subc2 in cgj2.DefaultIfEmpty()

但这不起作用,有什么想法吗?

试试这个:

var list = from A in this.A
join B in this.B
on A.HelloID equals B.HelloID into bgj
from B in bgj.DefaultIfEmpty()
join C in this.C
on A.BusyId equals C.BusyId into cgj
from C in cgj.DefaultIfEmpty()
where B.MemID == C.MemID 

你应该澄清关于MemID和BusyId的问题。如果它们可以为空。在本例中,最后一行可以像这样:

where (B.MemID==null || B.MemID == C.MemID )
//Or 
where ((B.MemID==null && C.MemID==null)  || (B.MemID == C.MemID ))
var list = from A in this.A
join B in this.B
on A.HelloID equals B.HelloID into bgj
from subb in bgj.DefaultIfEmpty()
join C in this.C
on new { colA = A.BusyID, colB = B.MemID }  equals new { colA = C.BusyID, colB = C.MemID } into cgj
from subc in cgj.DefaultIfEmpty()

最新更新