2014-10-03 6 views
0

Мне нужно сгруппировать по dept и needWeek, а затем добавить sum вместе, добавить open вместе и добавить closed вместе.LINQ с группировкой и суммированием

Этот запрос:

var query8 = from q8 in query7 
      group q8 by new { q8.q7.dept, q8.needWeek, q8.q7.allCount, q8.q7.openCount, q8.q7.closedCount } into g 
      select new 
      { 
       dept = g.Key.dept, 
       needWeek = g.Key.needWeek, 
       sum = g.Sum(q8 => g.Key.allCount), 
       open = g.Sum(q8 => g.Key.openCount), 
       closed = g.Sum(q8 => g.Key.closedCount) 
      }; 

вернется:

{ dept = foo, needWeek = 05/20/12, sum = 7, open = 3, closed = 4 } 
{ dept = foo, needWeek = 05/20/12, sum = 2, open = 0, closed = 2 } 

, но мне нужно:

{ dept = foo, needWeek = 05/20/12, sum = 9, open = 3, closed = 6 } 

Как близко я?

ответ

2

Вы близко, но вы группируете все ненужные поля. Просто группа по тому, что является общим для всех.

var query8 = 
    from q8 in query7 
    group new { q8.q7.allCount, q8.q7.openCount, q8.q7.closedCount } 
     by new { q8.q7.dept, q8.needWeek } 
     into g 
    select new 
    { 
     g.Key.dept, 
     g.Key.needWeek, 
     sum = g.Sum(x => x.allCount), 
     open = g.Sum(x => x.openCount), 
     closed = g.Sum(x => x.closedCount), 
    }; 
+0

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

+0

нормальной группы по синтаксису: 'группы [пункт] по [ключ]'. Элемент - это объект, который помещается в группы и ключ, который вы должны знать. Здесь я не обязательно хочу получать группы объектов 'q8', только некоторые их свойства. –

+0

Thx, я проверю это в LINQPAD. Можете ли вы привести пример, где это может быть использовано? – CheGueVerra

0

мне нужно сгруппировать по dept и needWeek

Так почему же не ваш код следовать вашим потребностям? Почему вы все группируетесь?

group q8 by new { q8.q7.dept, q8.needWeek } into g 
select new 
{ 
    dept = g.Key.dept, 
    needWeek = g.Key.needWeek, 
    sum = g.Sum(q8 => g.q7.allCount), 
    open = g.Sum(q8 => g.q7.openCount), 
    closed = g.Sum(q8 => g.q7.closedCount) 
}; 
Смежные вопросы