在 DataTable 列总和中分组

Posted

技术标签:

【中文标题】在 DataTable 列总和中分组【英文标题】:Group by in DataTable Column sum 【发布时间】:2011-12-05 21:57:26 【问题描述】:

在下面的代码中查找sum of Rate column 中的DataTable dt

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=170Sum B=120

【问题讨论】:

【参考方案1】:

试试 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()))
                  ;

【讨论】:

【参考方案2】:

使用 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]);

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于在 DataTable 列总和中分组的主要内容,如果未能解决你的问题,请参考以下文章

如何计算asp.net中数据表列的总和?

如何在此 DataTable 上按一列分组

Pandas - 按函数和总和列分组以提取其他列总和为 0 的行

如何计算 LINQ 中 DataTable 的列的总和(到数据集)?

在 MySQL 中,如何找到分组在特定列上的 N 个最大值的总和? [复制]

令人惊讶的性能差异:List.Contains、Sorted List.ContainsKey、DataRowCollection.Contains、Data Table.Select、DataTab