Объединение двух запросов LINQ в один - PullRequest
3 голосов
/ 21 марта 2012

У меня есть таблица, содержащая около 15 различных полей, некоторые из которых - JobID (целочисленное поле), Cost (целочисленное поле) и LastUpdated (поле DateTime)

JobID  Cost      LastUpdated
 1      10        10-July-2011
 1      15        11-June-2011
 2      25        5-May-2011
 1      15        12-April-2011

Можно ли написать один запрос LINQ, чтобы получить сумму затрат для идентификатора задания = 1, а также дату последнего возникновения такой стоимости?

Пример вывода запроса для приведенных выше примеров данных выглядит следующим образом:

40 , 10-july-2011

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

//for last updated
(from row in MyTable where row.JobID == 1
 orderby row.LastUpdated descending
 select row.LastUpdated).First()

//for sum of cost
(from row in MyTable  
 where row.JobID == 1
 select row.Cost).Sum()

Будет ли один запрос linq лучше в таком случае? Подобные случаи во время загрузки страницы приведут к нескольким попаданиям в базу данных, всего около 18, к 9 различным таблицам. Объединяя сумму и дату последнего обновления в одном запросе, я пытаюсь уменьшить количество посещений до 9, по одному для каждой таблицы.

Спасибо за ваше время ...

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Да, вы можете сделать group by, как это

var query = from row in MyTable
            group row by row.JobID into rows
            where rows.Key == 1 
            select new
            {
              LastUpdated = rows.Select(x => x.LastUpdated).OrderByDescending(x => x).First(),
              Cost = rows.Sum(x => x.Cost),
            };
2 голосов
/ 21 марта 2012

Вы можете использовать это:

MyTable.Where(x => x.JobID == 1)
       .OrderByDescending(x => x.LastUpdated)
       .GroupBy(x => x.JobID)
       .Select(x => new { LastUpdated = x.First().LastUpdated, 
                          Sum = x.Sum(y => y.Cost) } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...