Учитывая этот запрос:
from s in services
select new
{
s.Id,
s.DateTime,
Class = s.Class.Name,
s.Location,
s.Price,
HeadCount = s.Reservations.Sum(r => r.PartySize), // problem here. r.PartySize is int
s.MaxSeats
}
Если служба не имеет каких-либо резервирований, выдается это исключение:
System.InvalidOperationException: преобразование к типу значения 'Int32' не выполнено, поскольку материализованное значение является нулевым. Либо универсальный параметр типа результата, либо запрос должен использовать обнуляемый тип.
Я понимаю, но как мне быть с этим? Мое намерение состоит в том, что, если нет никаких резервирований, тогда HeadCount будет назначен 0.
Вы должны проверить это:
HeadCount = s.Reservations != null ? s.Reservations.Sum(r => r.PartySize) : 0,
Есть еще более простое решение:
from s in services
select new
{
s.Id,
s.DateTime,
Class = s.Class.Name,
s.Location,
s.Price,
HeadCount = (int?)s.Reservations.Sum(r => r.PartySize),
s.MaxSeats
}
Обратите внимание на актерский состав. Это также может привести к более простому SQL, чем предложение @ Ahmad
По сути, вы просто помогаете выводу типа.