簡體   English   中英

使用LINQ,C#將兩個條件左外部聯接構造為一個查詢

[英]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.

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