Linq左连接与where子句显示所有从左表不管

本文关键字:不管 子句 连接 where Linq 显示 | 更新日期: 2023-09-27 18:11:51

我遇到了一些问题

我需要CustomerDiscountGroups表中的所有内容,然后连接另一个表中的列。如果where条件显示没有customerdiscount,我仍然希望它显示CustomerDiscountGroups表中的所有列,并且Discount_PC(十进制)的状态为0

这是我的尝试

from c in CustomerDiscountGroups
join d in CustomerDiscounts on c.ID equals d.Discount_ID into cd
    from cdi in (from f in cd
    where f.AccountNo ==  "test" 
    select f).DefaultIfEmpty()
select new
{
    c.ID,
    c.DisplayName,
    c.Image,
    c.Added,
    c.Added_by,
    c.Edited,
    c.Edited_by,
    //cdi.Discount_PC
}

Linq左连接与where子句显示所有从左表不管

DefaultIfEmpty将使cdi成为null,即使它是CustomerDiscounts类型。你必须在select条款中处理这种情况:

select new
{
    c.ID,
    c.DisplayName,
    c.Image,
    c.Added,
    c.Added_by,
    c.Edited,
    c.Edited_by,
    Discount_PC = cdi == null ? 0 : cdi.Discount_PC
}

为它写一个三元操作符有点尴尬,事实上,在c# 6中可能会有一个新的简写操作符。