【发布时间】:2016-07-11 07:21:23
【问题描述】:
我无法弄清楚为什么这无法投射。它说它为空,但绝不应该是这种情况,因为我正在检查它是否为空并将其替换为 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,我只需要总结这些数量。我错过了什么?
【问题讨论】:
-
试试:.Sum(su => su.amount ?? 0D));
-
您是否尝试搜索该错误?没有行,导致
Sum()(或者更确切地说从查询结果到请求类型的变量的具体化)失败并出现这个神秘的异常。 -
如果 su.amount 可以为空,使用:Sum(su => su.amount ? su.amount.Value : 0m));
-
那么您实际上是在投射到
double还是decimal?您显示的代码与您显示的错误不匹配... -
不相关,但您是否有理由将一个非常好的小数转换为一个非常糟糕的双倍,以获得一个看似财务的价值?
标签: c# entity-framework linq lambda