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