Linq to Sql Sum без записей - PullRequest
9 голосов
/ 02 марта 2010

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

Я вижу, как это будет с ошибкой без данных:

double fuelCost = (double)(from a in db.EquipmentFuelLogs
                           where a.wdEquipmentMainGeneralOID == vehicleKey &&    
                                (monthBeginDate < a.Date1 && a.Date1 < monthEndDate)
                           select a.TotalCost).Sum();

Каков наилучший подход для определения отсутствия операций с топливом за этот месяц и установки стоимости топлива на 0? Просто попробуйте поймать? В этой статье говорится о проблеме, но нет решения.

Ответы [ 3 ]

15 голосов
/ 25 мая 2010

Проблема заключается в том, что метод where не возвращает последовательность, в которой сумма не может работать, однако, если вы используете .DefaultIfEmpty до суммы, она работает нормально.

decimal? orderValue = 
    orders.Where(ee => ee.Name == "SomeName").DefaultIfEmpty().Sum(s => s.OrderCost);

Надеюсь, это поможет.

5 голосов
/ 23 октября 2012

Я решил:

decimal orderValue = orders.Where(ee => ee.Name == "SomeName").Sum(s => (decimal?)s.OrderCost)??0;
0 голосов
/ 15 марта 2010

Я добавил улов, чтобы поймать ошибку. Я никогда не находил другого решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...