У меня есть код, написанный разработчиком. Я думаю, что его ужасно и не должно быть необходимымТерминальный код Linq Лучшее решение
value = s.Businesses.SelectMany(
x => x.Payments.Where(
w => w.total != 0 &&
!w.jobId.HasValue &&
w.createdAt >= Utility.monthS
&& w.createdAt <= Utility.monthE)
).Any() ?
s.Businesses.SelectMany(
x => x.Payments.Where(
w => w.total != 0 &&
!w.jobId.HasValue &&
w.createdAt >= Utility.monthS
&& w.createdAt <= Utility.monthE)
).Sum(su => su.quantity)
: 0;
Причина это делает .Any
до Sum
является то, что записи без каких-либо значений в конечном итоге получить нулевые значения и может привести к ошибкам.
Есть ли лучший способ передовой практики написания.
'Enumerable.Sum' когда вызывается в пустой коллекции, будет возвращаться 0. – juharr
Я бы порекомендовал, по крайней мере, присвоить переменную 'SelectMany' переменной, поэтому вам нужно будет ее переходить только один раз. Затем используйте .Any и .Sum для переменной. Это приведет к более чистым взглядам. – Bob