C#Linq Left Outer Join WHERE子句

时间:2017-11-03 11:24:33

标签: c# asp.net-mvc linq

我有一个linq查询,我正在尝试返回数据,如果右Sales表没有记录,并且只有Sales.Fallthrough == false && Sales.Date == null

这是我的查询的基础,我尝试了许多不同的东西,但似乎无法让它返回所需的数据。我尝试的所有内容似乎只返回记录,如果没有Sales或者它们与WERE caluse相匹配,但不是两者都匹配。

from cr in efContext.Cases
join si in efContext.Sales on cr.CaseId equals si.CaseId into sicr
from sicr in (from si in sicr
                where si == null
                select si
                ).DefaultIfEmpty()
where cr.Withdrawn == false
    select new
    {
        CaseId = cr.CaseId,
        PropertyAddress = extension.PropertyAddressTownFormat(cr.PropertyAddress1, cr.PropertyTown),
        TargetExchangeDate = sicr.TargetExchangeDate == null ? null : sicr1.TargetExchangeDate,
        ActualExchangeDate = sicr.ActualExchangeDate,
    }).ToList();

修改 错过了一些信息。 此外,如果Sales中有记录但与WHERE子句不匹配,则仍然会返回左侧和右侧,就好像没有记录一样。

感谢。

1 个答案:

答案 0 :(得分:0)

不仅仅是......?

from cr in efContext.Cases
join si in efContext.Sales on cr.CaseId equals si.CaseId into sicr
from s in sicr.DefaultIfEmpty()
select new
{
    CaseId = cr.CaseId,
    PropertyAddress = extension.PropertyAddressTownFormat(cr.PropertyAddress1, cr.PropertyTown),
    TargetExchangeDate = s == null || (s.Fallthrough == false && s.Date == null) ? null : s.TargetExchangeDate,
    ActualExchangeDate = s == null || (s.Fallthrough == false && s.Date == null) ? null : s.ActualExchangeDate,
};

请注意,由于查询返回匿名类型,因此无法调用ToList。