在 DataTable 列总和中分组
Posted
技术标签:
【中文标题】在 DataTable 列总和中分组【英文标题】:Group by in DataTable Column sum 【发布时间】:2011-12-05 21:57:26 【问题描述】:在下面的代码中查找sum of Rate colum
n 中的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=170
和Sum 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 列总和中分组的主要内容,如果未能解决你的问题,请参考以下文章
Pandas - 按函数和总和列分组以提取其他列总和为 0 的行
如何计算 LINQ 中 DataTable 的列的总和(到数据集)?
在 MySQL 中,如何找到分组在特定列上的 N 个最大值的总和? [复制]
令人惊讶的性能差异:List.Contains、Sorted List.ContainsKey、DataRowCollection.Contains、Data Table.Select、DataTab