У меня есть большой запрос Entity Framework, содержащий эти строки.
var programs = from p in Repository.Query<Program>()
               where p.OfficeId == CurrentOffice.Id
               let totalCharges = p.ProgramBillings.Where(b => b.Amount > 0 && b.DeletedDate == null).Select(b => b.Amount).Sum()
               let totalCredits = p.ProgramBillings.Where(b => b.Amount < 0 && b.DeletedDate == null).Select(b => -b.Amount).Sum()
               let billingBalance = (totalCharges - totalCredits)
Когда я материализую данные, я получаю следующую ошибку:
Приведение значения к типу значения "Десятичный" завершилось неудачно, поскольку материализованное значение равно нулю. Либо общий параметр типа результата, либо запрос должен использовать тип с нулевым значением.
Если я изменил свой запрос следующим образом (добавленный в двух типах), ошибка исчезнет.
var programs = from p in Repository.Query<Program>()
               where p.OfficeId == CurrentOffice.Id
               let totalCharges = (decimal?)p.ProgramBillings.Where(b => b.Amount > 0 && b.DeletedDate == null).Select(b => b.Amount).Sum()
               let totalCredits = (decimal?)p.ProgramBillings.Where(b => b.Amount < 0 && b.DeletedDate == null).Select(b => -b.Amount).Sum()
               let billingBalance = (totalCharges - totalCredits)
Я не понимаю этого. ProgramBilling.Amount является непустым значением десятичного числа. Если я нахожусь над вызовом Sum(), Intellisense говорит, что возвращает тип Decimal. И все же дополнительные тесты подтвердили, что в моей второй версии totalCharges и totalCredits оба установлены равными нулю для тех строк, где ProgramBillings не имеет данных.
Вопросы:
-  Я понял, что Sum()возвращает 0 для пустой коллекции. При каких обстоятельствах это не так?
-  И если иногда это не так, то почему, когда я наводил курсор на Sum(), Intellisense показывает, что он возвращает тип Decimal, а не Decimal? Похоже, у Intellisense было такое же понимание, что и у меня.
EDIT:
Казалось бы, легко сделать что-то вроде Sum() ?? 0m. Но это незаконно, давая мне ошибку:
Оператор '??' не может применяться к операндам типа "десятичный" и "десятичный"
