我正在寻找一个问题的解决方案,使DefaultIfEmpty()
扩展方法在LINQ外连接中使用时不会拾取空值。
代码如下:
var SummaryLossesWithNets = (from g in SummaryLosses
join n in nets
on g.Year equals n.Year into grouping
from x in grouping.DefaultIfEmpty()
select new
{
Year = g.Year,
OEPGR = g.OccuranceLoss,
AEPGR = g.AggregateLoss,
OEPNET = ((x.OEPRecovery == null) ? 0 : x.OEPRecovery),
AEPNET = ((x.AEPRecovery == null) ? 0 : x.AEPRecovery),
});
在List SummaryLosses中,我希望加入表'nets'的数据有多年,其中包含多年的子部分。假设x是一个空值,我假设是因为SummaryLosses中的年份与网络中未匹配的年份在分组列表中创建了空值。
如何在这里检查空值?正如您所看到的,我试图在x的属性上检查null,但由于x为null,因此无效。
亲切的问候 理查德
答案 0 :(得分:8)
只需检查x
是否为null:
OEPNET = x == null ? 0 : x.OEPRecovery,
AEPNET = x == null ? 0 : x.AEPRecovery
或者如果x.OEPRecovery
和x.AEPRecovery
也是可以为空的属性,请使用:
OEPNET = x == null ? 0 : (x.OEPRecovery ?? 0),
AEPNET = x == null ? 0 : (x.AEPRecovery ?? 0)
答案 1 :(得分:0)
如果你有很多连接陈述
勾选支票
all joined tables
并确保foreign key you are using
(比较或让我们感兴趣)is not null