【发布时间】:2010-10-09 06:50:01
【问题描述】:
我有这个代码(好吧,我没有,但是类似的东西:p)
var dogs = Dogs.Select(ø => new Row
{
Name = ø.Name,
WeightOfNiceCats = ø.Owner
.Cats
.Where(æ => !æ.Annoying)
.Sum(æ => æ.Weight),
});
在这里,我遍历所有狗并总结所有与狗拥有相同主人的不烦人的猫的重量(成一个不可为空的小数)。当然,几乎所有的猫都很烦人,所以我得到了这个错误:
null 值不能分配给 System.Decimal 类型的成员,该类型是不可为 null 的值类型。
所使用的字段或外键都不能为空。因此,当Where 子句不返回任何猫时,就会发生错误,这通常会发生。但是我该如何解决呢?我希望它在发生这种情况时返回 0。在Where 子句之后尝试使用DefaultIfEmpty(),但随后出现此错误:
对象引用未设置为对象的实例。
我想这是可以理解的。我尝试在Sum 之后添加??,但由于此错误而无法编译:
运算符'??'不能应用于“十进制”和“十进制”类型的操作数
这当然也有道理。那么我能做什么呢?如果 Sum 在没有什么可总结的情况下只是返回 0 那就太好了。或某种SumOrZero 声明。制作与 Linq2SQL 一起使用的SumOrZero 方法会不会很困难?
【问题讨论】:
-
好问题。很遗憾,这种行为似乎没有记录在 MSDN 中。
标签: c# linq-to-sql nullreferenceexception