按DataTable列总和分组

时间:2011-10-12 07:49:47

标签: c# winforms datatable

在以下代码中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

3 个答案:

答案 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 + "'");