我无法弄清楚为什么这不能投。它说它是空的,但绝不应该这样,因为我正在检查它是否为null并将其替换为0,对吗?
var BF = (double)filtered.Sum(s => s.fees
.Where(w => w.status == "B")
.Sum(su => su.amount ?? 0));
错误:The cast to value type 'System.Decimal' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.
我有一个对象列表,每个对象都包含一个fees
列表,其中包含一个可以为空的十进制amount
,我只需要总结这些金额。我错过了什么?
答案 0 :(得分:2)
由于null
在空集上完成后会返回.DefaultIfEmpty(0)
,我建议使用var BF = (double)filtered.Sum(s => s.fees
.Where(w => w.status == "B" && w.amount != null)
.Select(su => su.amount)
.DefaultIfEmpty(0)
.Sum());
以确保您避免在此方案中遇到null。
为了限制集合,我还建议过滤掉空值。
concat
答案 1 :(得分:0)
试试这个:
var BF = (double)filtered.Sum(s => s.fees.Where(w => w.status == "B").Sum(su => su.amount ?? 0) ?? 0);
也许内部lambda“s.fees.Where(w => w.status ==”B“)。Sum(su => su.amount ?? 0)”return null