C#使⽤DataTable的GroupBy,对数据某列进⾏分组求和
C# 使⽤DataTable的GroupBy,对数据某列进⾏分组求和
⼀、需求背景
通过Data Table创建多个⾏,根据Material进⾏Group By分组,对Qty进⾏求和运算.
原始数据
Material TotalQTY Qty A101
B201
B202
A103
要获得的数据
Material TotalQTY Qty 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);
通过以上的代码实现原始数据
Material TotalQTY Qty A101
groupby分组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就是要获得的数据
Material TotalQTY Qty A104
B203
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论