簡體   English   中英

LINQ中等效的SQL限制

[英]SQL limitation equivalent in linq

我正在尋找SQL查詢以下的linq。

select * from tableA as A
left join tableB as B on A.Id = B.Id
left join tableC as C on B.Id = C.Id
left join tableD as D on C.Id = D.Id and D.OrderId = B.OrderId

我最感興趣的是如何使用此表達式正確限制結果:

 and D.OrderId = B.OrderId

C#代碼

var data = from a in tableA

join innerB in tableB on a.Id equals innerB.Id into INNERB
from b in INNERB.DefaultIfEmpty()

join innerC in tableC on b.Id equals innerC.Id into INNERC
from c in INNERC.DefaultIfEmpty()

join innerD in tableD on c.Id equals innerD.Id into INNERD
from d in INNERD.DefaultIfEmpty().Where(p=>p.OrderId == b.OrderId)

linq從數據庫返回的結果與SQL查詢不匹配。 如果您能向我解釋如何使用來自應用於每行的上一個聯接表中的變量,則可以得到任何提示。

我也嘗試過,但是編譯器拋出錯誤“ b的名稱在當前上下文中不存在”:

join innerD in tableD.Where(p=>p.OrderId == b.OrderId) on c.Id equals innerD.Id into INNERD
from d in INNERD.DefaultIfEmpty()

請參閱以下答案以獲取更簡單的LEFT JOIN語法: https : //stackoverflow.com/a/4739738/1869660

您的查詢將是:

var data = from a in tableA
           from b in tableB.Where(x => x.Id == a.Id)
                           .DefaultIfEmpty()
           from c in tableC.Where(x => x.Id == b.Id)
                           .DefaultIfEmpty()
           from d in tableC.Where(x => (x.Id == c.Id) && (x.OrderId == b.OrderId))
                           .DefaultIfEmpty()
           select ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM