[英]Structuring two conditional left outer joins into one query using LINQ, C#
當前,我正在基於w.Type
是1還是2執行兩個查詢。如果w.Type
為1,則執行對Issues表的聯接,如果Type。為2,則對TSubs表聯接。 我正在嘗試將這些查詢合並為一個。
var productIdOne = (from w in listAbandonedCarts
join i in Issues on w.ProductId equals i.Id
where w.Type == 1
select new { i.Title.Name }).ToList();
var productIdTwo = (from w in listAbandonedCarts
join ts in TSubs on w.ProductId equals ts.Id
where w.Type == 2
select new { ts.Title.Name }).ToList();
我正在考慮基於此SQL偽代碼使用兩個左外部聯接
SELECT*
FROM P_carts pc
LEFT OUTER tSubs ts on ts.id = pc.productid and pc.Type = 2
LEFT OUTER issues i on i.id = pc.productid and pc.Type = 1
到目前為止,我有一些linq偽編碼,但是我正在努力使兩個條件連接的語法正確
var listProducts = (from w in listAbandonedCarts
join i in Issues on w.ProductId equals i.Id into iN && w.ProductId == 1
from i in iN.DefaultIfEmpty()
join into ts in TSubs.....
我苦苦掙扎的問題是,這不是它的兩個單獨連接的左外角。 我當前的錯誤是,在w.ProductId
之后我無法擁有w.ProductId
,因為此時我不在w的范圍內,並且無法弄清楚如何構造linq語句。 任何幫助將不勝感激,謝謝!
試一下:
var productIds = (
from w in listAbandonedCarts
from i in Issues.Where(issue => issue.Id == w.ProductId && w.Type == 1).DefaultIfEmpty()
from t in TSubs.Where(tsub => tsub.Id == w.ProductId && w.Type == 2).DefaultIfEmpty()
select new {Name = (w.Type == 1 ? i.Title.Name : t.Title.Name)})
.ToList();
var listProducts = (from w in listAbandonedCarts
join i in Issues on w.ProductId equals i.Id && w.ProductId == 1 into iN
from i in iN.DefaultIfEmpty()
join into ts in TSubs on ts.id equals pc.productid into tsBag
from ts in tsBag.DefaultIfEmpty()
select new
{
// All columns you need
};
請嘗試上面的linq。 此示例代碼未經編譯或測試。 請僅將此用作參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.