DefaultIfEmpty上的LINQ NullReferenceException

时间:2012-10-24 15:08:58

标签: linq nullreferenceexception defaultifempty

我正在寻找一个问题的解决方案,使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,因此无效。

亲切的问候 理查德

2 个答案:

答案 0 :(得分:8)

只需检查x是否为null:

OEPNET = x == null ? 0 : x.OEPRecovery,
AEPNET = x == null ? 0 : x.AEPRecovery

或者如果x.OEPRecoveryx.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