我有一个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子句不匹配,则仍然会返回左侧和右侧,就好像没有记录一样。
感谢。
答案 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。