C# 使用DataTable的GroupBy,对数据某列进行分组求和

C# 使用DataTable的GroupBy,对数据某列进行分组求和

一、需求背景

通过Data Table创建多个行,根据Material进行Group By分组,对Qty进行求和运算.
原始数据

MaterialTotalQTYQty
A101
B201
B202
A103

要获得的数据

MaterialTotalQTYQty
A104
B203

实际上要执行该SQL语句:
select Material ,TotalQTY,sum(Qty) from tableName group by Material ,TotalQTY ;
由于该表是有前台创建的,DB中没有该表信息所以不能使用SQL语句,我采用的Linq语句实现的对Material ,TotalQTY的分组求和。

二、使用DataTable创建表及数据

//1、新建表
private  DataTable dtResult = new DataTable();

//2、表中添加列
 dtResult.Columns.Add("Material", typeof(string));
 dtResult.Columns.Add("TotalQTY", Type.GetType("System.Decimal"));
 dtResult.Columns.Add("QTY", Type.GetType("System.Decimal"));
 
//3、初始化行并添加数据
DataRow row = dtResult.NewRow();
row["Material"] = "Material_A";
row["TotalQTY"] = "100";
row["QTY"] = "5";

//4、表中添加行
dtResult.Rows.Add(row);

通过以上的代码实现原始数据

MaterialTotalQTYQty
A101
B201
B202
A103

三、GroupBy对数据分组求和

采用Linq语句对数据进行分组,通过创建新的DataTable达到分组求和的目的。

 DataTable dtGroupBy = dtResult.AsEnumerable().GroupBy(r => new { Material= r["Material"], TotalQTY= r["TotalQTY"]}).Select(
                    g =>{
                        var row = dtResult.NewRow();

                        row["Material"] = g.Key.Material;
                        row["TotalQTY"] = g.Key.TotalQTY;
                        row["QTY"] = g.Sum(r => (decimal)r["QTY"]);
                        return row;
                    }).CopyToDataTable();

dtGroupBy就是要获得的数据

MaterialTotalQTYQty
A104
B203

版权声明:本文为qq_39040714原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。