Исключение при использовании 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);