【问题标题】:Exception when using LINQ SUM使用 LINQ SUM 时出现异常
【发布时间】:2011-04-15 09:53:55
【问题描述】:

我正在尝试获取“预订”的总和,但出现错误“转换为值类型 'Int32' 失败,因为具体化值为空。结果类型的泛型参数或查询必须使用可空类型。”

var bookings = entities.Bookings.Where(x => x.ID == id &&
                                     x.StartDate <= bookingEnd &&
                                     x.EndDate >= bookingStart)
                                    .Sum(x => x.BookingQuantity);

我该如何解决这个问题?如果它为空,我需要得到 0,否则它的预订。

【问题讨论】:

标签: linq entity-framework


【解决方案1】:

尝试空合并运算符:

var bookings = entities.Bookings.Where(x => x.ID == id &&
                                 x.StartDate <= bookingEnd &&
                                 x.EndDate >= bookingStart && 
                                 x.BookingQuantity != null)
                                .Sum(x => (int?)x.BookingQuantity) ?? 0;

或将预订声明为可为空的 int

int?预订 = ...

编译器类型推断将 Sum 的结果提取为纯 int,它永远不应为 null。

【讨论】:

  • 在我的情况下,它还返回 int,而不是可以为空的 int,这没有意义。怎么样? 0 然后修复它?
【解决方案2】:

This page 建议解决此问题;

Sum(x => (int?)x.BookingQuantity) ?? 0;

【讨论】:

  • 我的编译器抛出一个错误说'??不能应用于类型 int'
  • 你把它转换成 (int?) 了吗?
【解决方案3】:

添加对 null 的检查。

var bookings = entities.Bookings.Where(x => x.ID == id &&
                                     x.StartDate <= bookingEnd &&
                                     x.EndDate >= bookingStart && 
                                     x.BookingQuantity != null)
                                    .Sum(x => x.BookingQuantity);

【讨论】:

  • SELECT * FROM Bookings WHERE BookingQuantity IS NULL 返回 0 行,因此如果有的话,所有行都有 1 或更多。
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 2013-04-20
  • 2015-04-26
  • 2023-04-02
相关资源
最近更新 更多