Linq to Sql с лямбда-суммой как условие где - PullRequest
6 голосов
/ 03 ноября 2011

У меня следующий запрос

from p in _context.Products
where p.Purchases.Sum(item => item.CCAmount) > 0 && p.Purchases.Sum(item => item.CCAmount) > p.PayOuts.Sum((item => item.AmountPaid)
select p;

По сути, я пытаюсь получить все продукты, у которых суммарная сумма покупки больше 0, а сумма покупки превышает сумму, которую мы выплатили (мыпродают товары от имени других людей и оплачивают их полностью или частично).Проблема заключается в том, что если в таблице выплат для определенного продукта нет записей, то этот продукт не появляется в результирующем списке.Однако, если я вставлю выплату в таблицу выплат, этот продукт появится в списке продуктов.Это почти так же, как если бы использование суммы в пустой коллекции не оценивалось так, как можно было бы ожидать, то есть как 0. Я что-то здесь упускаю?

Спасибо за вашу помощь.

1 Ответ

5 голосов
/ 03 ноября 2011

Проблема в том, что SUM в SQL возвращает null, если нет записей для суммирования.

Вам нужно немного обмануть.

Попробуйте:

((int?)p.PayOuts.Sum(item => item.AmountPaid)).GetValueOrDefault()

или написано немного по-другому

((int?)p.PayOuts.Sum(item => item.AmountPaid) ?? 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...