DataTable 根据某列分组取出count数量

本文介绍了一个使用 C# 对 DataTable 进行分组并计算各组计数的示例代码。通过创建新的 DataTable 来存储分组后的数据,并利用 Clone 方法及 Compute 方法来实现数据的筛选和计数。
 //示例代码
        DataTable ndt = new DataTable();
        ndt.Columns.AddRange(new DataColumn[] { new DataColumn("Typename", typeof(string)),
                                        new DataColumn("count", typeof(int)),
                                        new DataColumn("nowCount", typeof(int)) });
        DataTable dtResult = ds.Tables[0].Clone();
        DataTable dtName = ds.Tables[0].DefaultView.ToTable(true, "Typename");
        for (int i = 0; i < dtName.Rows.Count; i++)
        {
            DataRow[] rows = ds.Tables[0].Select("Typename='" + dtName.Rows[i][0] + "'");
            //temp用来存储筛选出来的数据
            DataTable temp = dtResult.Clone();
            foreach (DataRow row in rows)
            {
                temp.Rows.Add(row.ItemArray);
            }

            DataRow dr = ndt.NewRow();
            dr[0] = dtName.Rows[i][0].ToString();
            dr[1] = temp.Compute("count(Typename)", "");
            dr[2] = 0;
            ndt.Rows.Add(dr);
        }

备注: 

ds.Tables[0]  //需要分组的数据源table

转载于:https://www.cnblogs.com/ace-wuqing/p/5549425.html

在数据分析和处理中,DataTable是一种常用的数据结构,特别是在.NET平台上。如果你想要根据某一列的数值将DataTable拆分成多个子DataTable,可以按照以下步骤操作: 1. 首先,你需要有一个包含你要拆分依据的列的DataTable。 ```csharp DataTable originalTable = // 假设这是原始数据表 string splitColumn = "你的分割列名"; // 指定用于拆分的列的名称 ``` 2. 确保这个列是数值类型,如Int32、Double等,因为通常只有数值类型可以根据值进行区间划分。 3. 使用LINQ查询或者循环遍历每个记录,创建一个新的DataTable来存储满足条件的数据。例如,你可以创建一个匿名类型来保存拆分后的数据,然后添加到新的DataTable中: ```csharp List<AnonymousType> resultGroups = new List<AnonymousType>(); foreach (DataRow row in originalTable.Rows) { int value = Convert.ToInt32(row[splitColumn]); if (!resultGroups.Any(g => g.Field<int>(splitColumn) == value)) { AnonymousType group = new(); group["ColumnName"] = value; // 根据需要替换为实际的列名 resultGroups.Add(group); } foreach (var group in resultGroups.Where(g => g.Field<int>(splitColumn) == value)) { DataTable subgroup = originalTable.Clone(); // 创建一个新的DataTable副本 subgroup.ImportRow(row); // 将当前行复制到新表 group.DataTable = subgroup; } } ``` 4. 最后,`resultGroups`将是一个列表,其中包含了根据`splitColumn`列值拆分后的多个子DataTable。 ```csharp // 结果 foreach (var group in resultGroups) { Console.WriteLine($"Split group for value {group.ColumnName}:"); Console.WriteLine(group.DataTable); // 或者更进一步地,根据需要存储或展示这些子DataTable } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值