2013-12-12 3 views
-3

У меня есть DataTable как этотСумма строк (Group By) в DataTable

ProductId CountThisWeek CountLastWeek 
     1   10   15   
     1   20    5 

     2    5   10 
     2   10   15 
     2   10   20 

     3   10   15 

мне нужно, чтобы получить новый DataTable путем "сжатия" (сумма по ProductID) мой первоначальный DataTable, как это:

ProductId CountThisWeek CountLastWeek 
     1   30   20   
     2   25   45 
     3   10   15 

Есть ли способ сделать это (.NET 3.5) с помощью LINQ или других методов?

+2

Да, есть способ. – Servy

+0

мог бы объяснить пояснитель? – serhio

+2

Что вы пробовали? Какие исследования вы сделали? Какие проблемы вы испытываете при реализации этой проблемы? См. Подсказку для кнопки downvote: «Этот вопрос не показывает каких-либо исследований, он неясен или не полезен» – Servy

ответ

4
from r in table.AsEnumerable() 
group r by r.Field<int>("ProductId") into g 
select new { 
    ProductId = g.Key, 
    CountThisWeek = g.Sum(r => r.Field<int>("CountThisWeek")), 
    CountLastWeek = g.Sum(r => r.Field<int>("CountLastWeek")) 
} 

Вы можете использовать CopyToDataTable() метод для создания нового DataTable из этих анонимных объектов.

+1

не распознает «id» в текущем контексте (внутри select new {...}), но g.Key, похоже, работает ... – serhio

+0

@serhio oops, извините. Исправлено: –

+0

Использование CopyToDataTable действительно суки .... Я создал Microsoft ObjectShreder (http://msdn.microsoft.com/en-us/library/bb669096.aspx), чтобы использовать этот метод с любым типом T, но теперь вызов метода неоднозначен между CopyToDataTable и CopyToDataTable (с шредером) ... – serhio

Смежные вопросы