DefaultIfEmpty上的LINQ NullReferenceException
我正在寻找一种解决方案,解决在LINQ外部联接中使用DefaultIfEmpty上的LINQ NullReferenceException,linq,nullreferenceexception,defaultifempty,Linq,Nullreferenceexception,Defaultifempty,我正在寻找一种解决方案,解决在LINQ外部联接中使用DefaultIfEmpty()扩展方法时不拾取空值的问题 代码如下: var SummaryLossesWithNets = (from g in SummaryLosses join n in nets on g.Year equals n.Year into group
DefaultIfEmpty()
扩展方法时不拾取空值的问题
代码如下:
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),
});
在总结损失列表中,我希望将许多年的数据加入到“网络”表中,该表包含了这些年的一小部分。如果x是空值,则会引发异常,我假设是因为SummaryLoss中的年份与nets中的年份不匹配会在分组列表中创建空值
这里应该如何检查空值?正如您所看到的,我试图检查x的属性是否为null,但是由于x为null,所以这不起作用
问候
Richard只需检查
x
是否为空:
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)
如果有许多join语句 检查所有联接的表,并确保使用的外键 (在比较或者说感兴趣时)
不是空的