繁体   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