在以下代码中sum of Rate colum
DataTable dt
n
dt.Compute("Sum(Convert(Rate, 'System.Int32'))");
在此可以指定group by clause like SQL
Inn订单,以根据同一dt
的另一列中的值获取Sum
例如:
----------------------------
Rate | Group
----------------------------
100 | A
120 | B
70 | A
----------------------------
我只想让Sum A=170
成为Sum B=120
。
答案 0 :(得分:12)
尝试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()))
};
答案 1 :(得分:4)
使用LINQ是一个好主意。如果您正在使用.net 2.0,则可以按如下方式实现:
Dictionary<string, int> dicSum = new Dictionary<string, int>();
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]);
答案 2 :(得分:2)
您可能希望首先从DataTable获取不同Group值的列表。然后循环遍历组列表并为每个组调用函数:
dt.Compute("Sum(Convert(Rate, 'System.Int32'))", "Group = '" + Group + "'");