如何在DataTable上分组并计算聚合函数(C#)

时间:2016-11-23 11:20:47

标签: c# linq datatable group-by average

来自给定的DataTable,例如

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

我想用聚合函数和group创建一个不同的数据表,就像下面的SQL语句一样:

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

请注意,StdDev是我需要自己开发的功能,而Max,Min,Average可能已经存在于Linq中

如何在C#中完成? Linq有可能吗? 你知道任何允许这样做的扩展/库吗?

我正在寻找其他问题,但它们通常与选择最小值(但不是作为聚合函数,但通过在订购后选择第一个值)或专注于分组有关。

1 个答案:

答案 0 :(得分: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 )
{

}