来自给定的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有可能吗? 你知道任何允许这样做的扩展/库吗?
我正在寻找其他问题,但它们通常与选择最小值(但不是作为聚合函数,但通过在订购后选择第一个值)或专注于分组有关。
答案 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 )
{
}