我有这个代码(好吧,我没有,但是类似的东西:p)
var dogs = Dogs.Select(ø => new Row
{
Name = ø.Name,
WeightOfNiceCats = ø.Owner
.Cats
.Where(æ => !æ.Annoying)
.Sum(æ => æ.Weight),
});
在这里,我遍历所有狗并总结所有与狗拥有相同主人的不烦人的猫的重量(成一个不可为空的小数)。当然,几乎所有的猫都很烦人,所以我得到了这个错误:
不能将 null 值分配给 System.Decimal 类型的成员,该类型是不可为 null 的值类型。
使用的任何字段或外键都不能为空。因此,当Where
子句不返回猫时,就会发生错误,而这通常会发生。但是我该如何解决呢?我希望它在发生这种情况时返回 0。尝试使用DefaultIfEmpty()
afterWhere
子句,但随后出现此错误:
你调用的对象是空的。
我想这是可以理解的。我尝试在??
之后添加一个Sum
,但由于此错误,它不会编译:
操作员 '??' 不能应用于“十进制”和“十进制”类型的操作数
这当然也是有道理的。那么我能做什么呢?Sum
如果在没有什么可总结的情况下,事情只是返回 0,那就太好了。或者某种SumOrZero
声明。SumOrZero
制作一种适用于 Linq2SQL的方法会很困难吗?