Исключение при использовании LINQ SUM - PullRequest
11 голосов
/ 15 апреля 2011

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

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

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

Ответы [ 3 ]

41 голосов
/ 15 апреля 2011

Попробуйте использовать оператор объединения нулей:

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?bookings = ...

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

15 голосов
/ 15 апреля 2011

Эта страница предлагает решение этой проблемы;

Sum(x => (int?)x.BookingQuantity) ?? 0;
1 голос
/ 15 апреля 2011

Добавить проверку на ноль.

var bookings = entities.Bookings.Where(x => x.ID == id &&
                                     x.StartDate <= bookingEnd &&
                                     x.EndDate >= bookingStart && 
                                     x.BookingQuantity != null)
                                    .Sum(x => x.BookingQuantity);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...