演员双重失败?

时间:2016-03-23 20:05:02

标签: c# entity-framework linq lambda

我无法弄清楚为什么这不能投。它说它是空的,但绝不应该这样,因为我正在检查它是否为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,我只需要总结这些金额。我错过了什么?

2 个答案:

答案 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