相关疑难解决方法(0)

如果可能有空集,如何进行Linq聚合?

我有一个Linq集合Things,其中Thing有一个Amount(十进制)属性.

我正在尝试针对特定事物的子集对此进行聚合:

var total = myThings.Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)

这很好用.但后来我添加了一个条件,让我在结果中没有任何东西:

var total = myThings.Where(t => t.OtherProperty == 123).Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)

而不是得到total = 0或null,我得到一个错误:

System.InvalidOperationException:无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型.

这真是令人讨厌,因为我没想到这种行为.我本来期望总数为零,也许是null - 但肯定不会抛出异常!

我究竟做错了什么?什么是解决方法/修复?

编辑 - 例子

感谢大家的评论.这是一些代码,复制和粘贴(未简化).它是LinqToSql(也许这就是为什么你无法重现我的问题):

var claims = Claim.Where(cl => cl.ID < 0);
var count = claims.Count(); // count=0
var sum = claims.Sum(cl => cl.ClaimedAmount); // throws exception
Run Code Online (Sandbox Code Playgroud)

c# linq aggregate linq-to-sql

17
推荐指数
2
解决办法
6507
查看次数

标签 统计

aggregate ×1

c# ×1

linq ×1

linq-to-sql ×1