У меня есть этот код (хорошо, нет, но что-то похожее: p)
var dogs = Dogs.Select(ø => new Row
{
Name = ø.Name,
WeightOfNiceCats = ø.Owner
.Cats
.Where(æ => !æ.Annoying)
.Sum(æ => æ.Weight),
});
Здесь я просматриваю всех собак и суммирую вес (в ненулевой десятичной дроби) всех не раздражающих кошек, у которых тот же владелец, что и у собаки. Конечно, почти все кошки раздражают, поэтому я получаю эту ошибку:
Нулевое значение не может быть назначено члену с типом System.Decimal, который является необнуляемым типом значения.
Ни одно из используемых полей или внешних ключей не может быть нулевым. Таким образом, ошибка возникает, когда предложение Where
не возвращает кошек, что часто происходит. Но как я могу решить это? Я хочу вернуть 0, когда это произойдет. Пробовал с DefaultIfEmpty()
после предложения Where
, но затем я получаю эту ошибку:
Ссылка на объект не установлена для экземпляра объекта.
Что, я думаю, понятно. Я попытался добавить ??
после Sum
, но потом он не скомпилируется из-за этой ошибки:
Оператор '??' не может применяться к операндам типа «десятичный» и «десятичный»
Что также имеет смысл, конечно. Так что я могу сделать? Было бы хорошо, если бы вещь Sum
просто вернула 0, когда нечего было суммировать. Или SumOrZero
заявление некоторого вида. Было бы сложно создать метод SumOrZero
, который работал бы с Linq2SQL?