我有2个查询。一个找到Value列大于150,000的位置,我需要条目数。第二个是它的总和而不是计数。 Count完美运行,但总和崩溃并提供此错误
{"强制转换为类型' System.Decimal'失败,因为 具体化值为null。结果类型的通用参数 或者查询必须使用可空类型。"}
工作代码:
var excessCount = closedDealNonHost.Any() ? closedDealNonHost.Where(x => x.Value > 150000).Count() : 0;
崩溃代码:
var excessSum = CloseDealNonHost = closedDealNonHost.Any() ? closedDealNonHost.Where(x => x.Value > 150000).Sum(x => x.Value) : 0;
答案 0 :(得分:1)
您可以通过明确转换为decimal?
中的Sum
来解决此问题,例如:
var excessSum = CloseDealNonHost = closedDealNonHost.Any() ? closedDealNonHost
.Where(x => x.Value > 150000)
.Sum(x => (decimal?) x.Value) : 0;
问题是由于LINQ表达式生成了SQL,而在C#结束时,它会尝试返回decimal
,这不能容纳null
值,因此会出错。
您可能会看到:Linq To Entities: Queryable.Sum returns Null on an empty list