Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DefaultIfEmpty上的LINQ NullReferenceException_Linq_Nullreferenceexception_Defaultifempty - Fatal编程技术网

DefaultIfEmpty上的LINQ NullReferenceException

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

我正在寻找一种解决方案,解决在LINQ外部联接中使用
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语句

检查所有联接的表,并确保使用的外键 (在比较或者说感兴趣时)
不是空的