Исключение при использовании LINQ SUM

Я пытаюсь получить СУММУ "заказы", ​​и я получаю сообщение об ошибке. "Приведение значения к типу" Int32 "не выполнено, потому что материализованное значение равно нулю. Либо общий параметр результата или запрос должен использовать тип с нулевым значением."

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

Как я могу это исправить? Мне нужно получить 0, если он когда-либо будет пустым, оставив его заказы.

Ответ 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;

или объявить заказы как nullable int

Int? бронирование =...

Вывод типа компиляторов подбирает результат Sum как простой int, который никогда не должен быть нулевым.

Ответ 2

Эта страница предлагает исправить эту проблему;

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

Ответ 3

Добавьте проверку для null.

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