使用LINQ SUM时出现异常

Las*_*vik 11 linq entity-framework

我正在尝试获取"预订"的SUM并且我得到错误"转换为值类型'Int32'失败,因为具体化值为null.结果类型的泛型参数或查询必须使用可空类型."

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

我该如何解决这个问题?我需要得到0,如果它变成零,否则它的预订.

Sim*_*ill 41

尝试null合并运算符:

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

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

诠释?预订= ...

编译器类型推断将Sum的结果作为普通int,它永远不应为null.


Chr*_*ney 15

此页面建议修复此问题;

Sum(x => (int?)x.BookingQuantity) ?? 0;
Run Code Online (Sandbox Code Playgroud)