2016-11-23 70 views
1

從給定的DataTable中,例如,如何分組並計算DataTable上的聚合函數(C#)

Val1  Val2  Col1  Col2 
10  100  A  B 
20  200  A  B 
30  300  C  C 
40  400  C  C 

我想通過創建具有聚合函數和組不同的數據表,就像下面的SQL語句:

SELECT MIN(Val1), MAX(Val2), AVG(Val1), AVG(Val2), StdDev(Val1) From DataTable GROUP BY Col1, Col2 

請注意,STDDEV的是,我需要可能開發自己的功能,而最大,最小,平均可能已經存在於Linq

如何在C#中執行此操作? Linq有可能嗎? 你知道任何允許這樣做的擴展/庫嗎?

我一直在尋找其他問題,但他們通常與選擇最小值(但不是聚合函數,但通過選擇排序後的第一個值)或關注分組有關。

+0

@Downvoter - 下投票時發表評論! –

回答

1

嘗試這樣的事情

var groupedData = from row in dataTable.AsEnumerable() 
       group row by new {Col1=row["Col1"].ToString(), Col2=row["Col2"].ToString()} into g 
       select new 
       { 
        Col1 = g.Key.Col1, 
        Col2 = g.Key.Col2, 
        MinVal1 = g.Min(x => x.Field<decimal>("Val1")), 
        MaxVal2 = g.Max(x => x.Field<decimal>("Val2")), 
        MinVal1 = g.Min(x => x.Field<decimal>("Val1")), 
        AvgVal1 = g.Average(x => x.Field<decimal>("Val1")), 
        AvgVal2 = g.Average(x => x.Field<decimal>("Val2")) 

       }; 

foreach (var group in groupedData) 
{ 

}