DataTable实现分组

Posted dotnet261010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DataTable实现分组相关的知识,希望对你有一定的参考价值。

有时候我们从数据库中查询出来数据之后,需要按照DataTable的某列进行分组,可以使用下面的方法实现,代码如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataTableGroupDemo

    class Program
    
        static void Main(string[] args)
        
            // 准备数据
            DataTable dt = new DataTable();
            // 创建列
            DataColumn dcName = new DataColumn("Name", typeof(string));
            DataColumn dcAge = new DataColumn("Age", typeof(Int32));
            DataColumn dcScore = new DataColumn("Score", typeof(Int32));
            // 添加列
            dt.Columns.Add(dcName);
            dt.Columns.Add(dcAge);
            dt.Columns.Add(dcScore);
            // 添加数据
            dt.Rows.Add(new object[]  "Tom", 23, 67 );
            dt.Rows.Add(new object[]  "Tom", 23, 67 );
            dt.Rows.Add(new object[]  "Jack", 21, 100 );
            dt.Rows.Add(new object[]  "Greey", 24, 56 );
            dt.Rows.Add(new object[]  "Kevin", 24, 77 );
            dt.Rows.Add(new object[]  "Tom", 23, 82 );
            dt.Rows.Add(new object[]  "Greey", 24, 80 );
            dt.Rows.Add(new object[]  "Jack", 21, 90 );


            #region 使用Linq expression to DataTable group by
            var query = from p in dt.AsEnumerable()
                        group p by new  name = p.Field<string>("Name"),score=p.Field<Int32>("Score")  into m
                        select new
                        
                            Name = m.Key.name,
                            Score=m.Key.score
                        ;
            #endregion

            // 输出
            Console.WriteLine("Linq");
            foreach (var item in query)
            
                Console.WriteLine(item);
            

            Console.WriteLine("GroupBy");
            IEnumerable<IGrouping<string, DataRow>> result = dt.Rows.Cast<DataRow>().GroupBy<DataRow, string>(dr => dr["Name"].ToString());
            foreach (IGrouping<string, DataRow> ig in result)
            
                Console.WriteLine("key=" + ig.Key + "");
                foreach (DataRow dr in ig)
                                   
                    Console.WriteLine(dr["Name"].ToString().PadRight(10) + dr["Age"].ToString().PadRight(10) + dr["Score"].ToString().PadRight(10));
                
                    

            

            Console.ReadKey();
        
    

 

程序运行效果

技术图片

 

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

c#能不能实现在dataTable里查询并分组

如何在datatable中使用groupby进行分组统计

datatable 数据分组

c# datatable 分组并统计

想把datatable中的一列分组计算count(),用compute可以实现么?

对DataTable进行分组