2012-11-21 129 views
1

我想寫一個Linq查詢來應用分組DataTable,它將結果輸出爲DataTableLinq C#Groupby on datatable

我嘗試這個代碼,返回結果爲var類型,但我想要的結果DataTable

var query = from row in dt.AsEnumerable() 
      group row by row.Field<DateTime>("ExpDate").Year into grp 
      select new 
      { 
       Years = grp.Key, 
       RSF = grp.Sum(r => r.Field<decimal>("SpaceRSF")) 
      }; 

請你能幫助我找到一個合適的回答。

+0

你的意思你說「我想要的結果DataTable中」? –

+0

我的意思是說,從dt.AsEnumerable() 組中的行中的DataTable dts =行。字段(「ExpDate」)。年進grp 類似這樣的不作爲var類型,應該爲DataTable類型 – user1619672

+2

嘗試http://stackoverflow.com/a/1253737/1744834如果你想DataTable而不是IEnumerable –

回答

0

確定,所以根據本

select new 
      { 
       Years = grp.Key, 
       RSF = grp.Sum(r => r.Field<decimal>("SpaceRSF")) 
      }; 

code which return result as var type有效返回具有兩個屬性的對象的集合:YearsRSF
如果您想要具有數據表,請編寫將所有數據放入數據表的代碼。基本上,它可能看起來類似如下:

DataTable table = new DataTable(); 
table.Columns.Add("Years"); 
table.Columns.Add("RSF"); 
foreach(var item in query) 
{ 
    table.Add(item.Years, items.RSF) 
} 

希望這會有所幫助。

+0

謝謝你的回答,我已經做了相同的建議,但我認爲在這種情況下,我們可能會運行額外的foreach循環,我想避免如果可能的話,foreach並直接獲得輸出數據 – user1619672

2

查看How to: Implement CopyToDataTable - 本主題描述如何實現兩個定製的CopyToDataTable擴展方法,它們接受DataRow以外類型的泛型參數T.

只需使用代碼那篇文章(ObjectShredder<T>)實現以下結果:

DataTable table = query.CopyToDataTable();