6

我正在寻找一种解决方案,以解决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,这不起作用。

亲切的问候理查德

4

2 回答 2

8

只需检查是否x为空:

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)
于 2012-10-24T15:13:43.723 回答
0

如果你有很多 join 语句

检查检查all joined tables并确保foreign key you are using (在比较或让我们说感兴趣)is not null

于 2016-08-30T11:34:46.313 回答