You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:03:31