zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }

    程序运行效果

  • 相关阅读:
    PDO的预处理操作
    关于OOP(面向对象)
    关于MySql
    任务三
    任务二
    php文件操作
    php的会话技术
    php的常量 、变量和作用域
    php的函数和超全局变量
    预发布环境和分支部署
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/11495884.html
Copyright © 2011-2022 走看看