按DataTable列总和分组

在下面的代码中,用于在DataTable dt查找sum of Rate colum n的sum of Rate colum

 dt.Compute("Sum(Convert(Rate, 'System.Int32'))"); 

在这种情况下,可以group by clause like SQL Inn group by clause like SQL分配group by clause like SQL以便根据同一dt另一列中的值得到Sum,例如:

 ---------------------------- Rate | Group ---------------------------- 100 | A 120 | B 70 | A ---------------------------- 

我只想得到Sum A=170Sum B=120

试试LINQ,

 var result = from tab in dt.AsEnumerable() group tab by tab["Group"] into groupDt select new { Group = groupDt.Key, Sum=groupDt.Sum((r)=> decimal.Parse(r["Rate"].ToString())) }; 

使用LINQ是一个好主意。 如果你正在使用.net 2.0,你可以按如下方式实现:

  Dictionary dicSum = new Dictionary(); foreach (DataRow row in dt.Rows) { string group=row["Group"].ToString(); int rate=Convert.ToInt32(row["Rate"]); if (dicSum.ContainsKey(group)) dicSum[group] += rate; else dicSum.Add(group, rate); } foreach (string g in dicSum.Keys) Console.WriteLine("SUM({0})={1}", g, dicSum[g]); 

您可能希望首先从DataTable获取不同Group值的列表。 然后循环遍历组列表并为每个组调用函数:

 dt.Compute("Sum(Convert(Rate, 'System.Int32'))", "Group = '" + Group + "'");