【问题标题】:Sum a IQueryable Column with where clause使用 where 子句对 IQueryable 列求和
【发布时间】:2015-03-25 13:29:38
【问题描述】:

我有 2 个问题。一个找到值列大于 150,000 的位置,我需要条目数。第二个是总和而不是计数。 Count 运行良好,但总和崩溃并提供此错误

{"转换为值类型 'System.Decimal' 失败,因为 物化值为空。结果类型的泛型参数 或者查询必须使用可为空的类型。"}

工作代码:

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;

【问题讨论】:

  • 您的某些数据中包含NULL 值。您需要处理 NULL 值。

标签: c# linq


【解决方案1】:

您可以通过在Sum 中显式转换为decimal? 来解决此问题,例如:

var excessSum = CloseDealNonHost = closedDealNonHost.Any() ? closedDealNonHost
                                  .Where(x => x.Value > 150000)
                                  .Sum(x => (decimal?) x.Value) : 0;

问题是由于从 LINQ 表达式生成的 SQL,在 C# 结束时它将尝试返回无法容纳 null 值的 decimal,因此出现错误。

你可能会看到:Linq To Entities: Queryable.Sum returns Null on an empty list

【讨论】:

  • 感谢 Habib 提供的信息丰富的回答。它工作得很好,现在我清楚地了解了这个问题 =)
猜你喜欢
  • 2015-04-21
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多