如何在C#中对DataTable按列分组并统计不同idworker的数量?
实现C# DataTable分组统计不同idworker数量的方案
核心思路
按idwork、idtask、task、tag四列分组,对每组内的idworker去重后统计数量,最终将结果转换为新的DataTable。
代码实现
假设原DataTable名为originalTable,可通过LINQ to DataSet实现需求:
// 分组并统计每组不同idworker的数量 var groupedStats = originalTable.AsEnumerable() .GroupBy(row => new { IdWork = row.Field<int>("idwork"), IdTask = row.Field<int>("idtask"), Task = row.Field<string>("task"), Tag = row.Field<string>("tag") }) .Select(group => new { group.Key.IdWork, group.Key.IdTask, group.Key.Task, group.Key.Tag, Count = group.Select(r => r.Field<int>("idworker")).Distinct().Count() }); // 创建结果DataTable并定义列结构 DataTable resultTable = new DataTable(); resultTable.Columns.Add("idwork", typeof(int)); resultTable.Columns.Add("idtask", typeof(int)); resultTable.Columns.Add("task", typeof(string)); resultTable.Columns.Add("tag", typeof(string)); resultTable.Columns.Add("count", typeof(int)); // 将统计结果填充到新表 foreach (var stat in groupedStats) { resultTable.Rows.Add(stat.IdWork, stat.IdTask, stat.Task, stat.Tag, stat.Count); }
注意事项
- 如果原DataTable中字段类型与示例不符(比如
idworker是字符串类型),需对应修改Field<T>的泛型参数,例如row.Field<string>("idworker")。 - 确保引用
System.Linq和System.Data命名空间,否则LINQ方法和DataSet相关API无法正常使用。
内容的提问来源于stack exchange,提问作者paran0ia
相关产品推荐
相关产品推荐

