Простая проблема: у меня есть пользователи, у которых может быть много заказов, у которых может быть много продуктов. Как выглядит запрос Linq (лямбда), чтобы получить общую сумму всех значений Product.Price для пользователя?
Я пробовал это:
int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price)));
Но это ' s дает мне:
Приведение к типу значения 'Int32' завершилось неудачно, поскольку материализованное значение равно null. Либо общий параметр типа результата, либо запрос должен использовать тип, допускающий значение NULL.
Конечно, у пользователя может не быть никаких заказов, а в заказе не может быть никаких продуктов. Но Product.Price не допускает значения NULL.
Я попробовал это, думая, что он задыхается от пустых коллекций:
int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price) ?? 0) ?? 0) ?? 0;
Но он выдает ошибки компиляции, говоря, что левая часть ??
не допускает значения NULL.
Что я делаю неправильно?
Заранее спасибо.
ОБНОВЛЕНИЕ: рабочая версия моих примеров выше после использования логики Марка из его ответа:
int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => (int?)p.Price))) ?? 0;