按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=170
, Sum 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 + "'");