使用where子句对IQueryable列求和

时间:2015-03-25 13:29:39

标签: c# linq

我有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;

1 个答案:

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