2013-12-12 39 views
-3

我有一個DataTable這樣總和行(集團By)的數據表中的

ProductId CountThisWeek CountLastWeek 
     1   10   15   
     1   20    5 

     2    5   10 
     2   10   15 
     2   10   20 

     3   10   15 

我需要通過 「壓縮」(按ProductID對總和)我最初的數據表,這樣獲得一個新的DataTable:

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

有沒有辦法做到這一點(.NET 3.5)使用LINQ或其他技術?

+2

是的,有一種方法。 – Servy

+0

downvoter可能可以解釋? – 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哎呀,對不起。修正了 –

+0

CopyToDataTable的使用真的很難....我創建了微軟的ObjectShreder(http://msdn.microsoft.com/en-us/library/bb669096.aspx)使用這種方法與任何種類的T,但現在對該方法的調用在CopyToDataTable 和CopyToDataTable (帶有shreder)之間隱藏...... – serhio