2016-11-23 77 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) 
{ 

}