C#获取DataTable的前N行数据然后按指定字段排序

获取DataTable的前N行数据然后按指定字段排序

可以使用以下三种代码:

第一种:使用Linq

DataTable dtLast = dataTable.AsEnumerable().Take(count).OrderBy(dataRow => Convert.ToInt32(dataRow["Sequence"])).CopyToDataTable();

第二种:使用默认视图的Sort属性:

            DataTable dtLast = dataTable.AsEnumerable().Take(count).CopyToDataTable();
            dtLast.DefaultView.Sort = "Sequence asc";//逆序为Sequence desc
            dtLast = dtLast.DefaultView.ToTable();

第三种:使用循环迭代

            DataTable dtLast = dataTable.Clone();//克隆表结构,行数为0
            for (int i = 0; i < getCount; i++)
            {
                dtLast.Rows.Add(dataTable.Rows[i].ItemArray);
            }
            //按照Sequence进行排序
            DataRow[] array = dtLast.Select("1=1", "Sequence");
            dtLast = array.CopyToDataTable();

整体测试程序如下:

控制台应用程序FilterDataTableDemo

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

namespace FilterDataTableDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            int topCount = 5;
            DataTable dataTable = GetDataTable();
            PrintDataTable(dataTable);
            Console.WriteLine($"----------【使用Linq】打印DataTable的前【{topCount}】行并按Sequence顺序排序----------");
            DataTable dtLinq = GetTopDataAndOrderUseLinq(dataTable, topCount);
            PrintDataTable(dtLinq);
            Console.WriteLine($"--------【使用视图View】打印DataTable的前【{topCount}】行并按Sequence顺序排序--------");
            DataTable dtView = GetTopDataAndOrderUseView(dataTable, topCount);
            PrintDataTable(dtView);
            Console.WriteLine($"--------【使用循环迭代】打印DataTable的前【{topCount}】行并按Sequence顺序排序--------");
            DataTable dtIterator = GetTopDataAndOrderUseIterator(dataTable, topCount);
            PrintDataTable(dtIterator);

            Console.ReadLine();
        }

        /// <summary>
        /// 使用Linq获取前N行数据并排序
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        static DataTable GetTopDataAndOrderUseLinq(DataTable dataTable, int count) 
        {
            DataTable dtLast = dataTable.AsEnumerable().Take(count).OrderBy(dataRow => Convert.ToInt32(dataRow["Sequence"])).CopyToDataTable();
            return dtLast;
        }

        /// <summary>
        /// 使用视图的默认排序
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        static DataTable GetTopDataAndOrderUseView(DataTable dataTable, int count)
        {
            DataTable dtLast = dataTable.AsEnumerable().Take(count).CopyToDataTable();
            dtLast.DefaultView.Sort = "Sequence asc";//逆序为Sequence desc
            dtLast = dtLast.DefaultView.ToTable();
            return dtLast;
        }

        /// <summary>
        /// 使用循环迭代获取前N行数据并排序
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        static DataTable GetTopDataAndOrderUseIterator(DataTable dataTable, int count)
        {
            //考虑到 获取的行数比数据表本身的行数还要多,这里取较小值
            int getCount = Math.Min(dataTable.Rows.Count, count);
            DataTable dtLast = dataTable.Clone();//克隆表结构,行数为0
            for (int i = 0; i < getCount; i++)
            {
                dtLast.Rows.Add(dataTable.Rows[i].ItemArray);
            }
            //按照Sequence进行排序
            DataRow[] array = dtLast.Select("1=1", "Sequence");
            dtLast = array.CopyToDataTable();
            return dtLast;
        }

        /// <summary>
        /// 生成测试内存表
        /// </summary>
        /// <returns></returns>
        static DataTable GetDataTable() 
        {
            DataTable dt = new DataTable("Test");
            dt.Columns.Add("CoreId", typeof(int));
            dt.Columns.Add("Sequence", typeof(int));
            dt.Columns.Add("TestName", typeof(string));

            dt.Rows.Add(10, 5, "云天河");
            dt.Rows.Add(9, 4, "柳梦璃");
            dt.Rows.Add(8, 3, "韩菱纱");
            dt.Rows.Add(7, 2, "慕容紫英");
            dt.Rows.Add(6, 1, "璇玑");
            dt.Rows.Add(5, 5, "怀朔");
            dt.Rows.Add(4, 4, "云天青");
            dt.Rows.Add(3, 3, "夙玉");
            dt.Rows.Add(2, 2, "夙瑶");
            dt.Rows.Add(1, 1, "玄霄");
            return dt;
        }

        /// <summary>
        /// 打印内存数据表信息
        /// </summary>
        /// <param name="dataTable"></param>
        static void PrintDataTable(DataTable dataTable) 
        {
            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                Console.WriteLine(string.Join(",", dataTable.Rows[i].ItemArray));
            }
        }
    }
}

程序运行如图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/91939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Terraform学习】使用 Terraform 从 EC2 实例访问 S3 存储桶(Terraform-AWS最佳实战学习)

使用 Terraform 从 EC2 实例访问 S3 存储桶 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_ec2_s3connet 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_…

stm32之9.中断优先级配置

主函数main.c #include <stm32f4xx.h> #include "led.h" #include "key.h"#define PAin(n) (*(volatile uint32_t *)(0x42000000 (GPIOA_BASE0x10-0x40000000)*32 (n)*4)) #define PEin(n) (*(volatile uint32_t *)(0x42000000 (GP…

OpenCV基础知识(8)— 图形检测

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。图形检测是计算机视觉的一项重要功能。通过图形检测可以分析图像中可能存在的形状&#xff0c;然后对这些形状进行描绘&#xff0c;例如搜索并绘制图像的边缘&#xff0c;定位图像的位置&#xff0c;判断图像中有没有直线、…

【Terraform学习】使用 Terraform 创建Amazon VPC(Terraform-AWS最佳实战学习)

使用 Terraform 创建Amazon VPC 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_vpc 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_secret_key和 区域变量…

Vue3 中引入液晶数字字体(通常用于大屏设计)

一、下载 .ttf 字体文件到本地&#xff0c;放在 src 中的 assets 文件下 下载液晶字体 DS-Digital.ttf 二、在 css 文件中引入字体 /* src/assets/fonts/dsfont.css */ font-face {font-family: electronicFont;src: url(./DS-Digital.ttf);font-weight: normal;font-styl…

计算机毕业设计 志愿者服务系统 微信小程序设计与开发

本课题要求实现一套微信小程序志愿者服务管理&#xff0c;系统主要包括&#xff08;管理员&#xff0c;志愿者和团体管理者&#xff09;三个模块等功能。 。系统选用java语言&#xff0c;应用ssm框架&#xff0c; MySQL为后台数据库。系统主要包括首页、个人中心、志愿者管理、…

科研 | Zotero导入无PDF的参考文献、书籍

最近在用Zotero在Word中插入参考文献的时候发现&#xff0c;有些没在网上找到对应的PDF版本&#xff0c;但也不是必须要PDF版本的参考文献或者参考书籍&#xff0c;如何才能不影响正常的文献排版 主要是先在网上找到对应文献&#xff0c;书籍&#xff0c;网页等的ISBN&#xf…

【Qt学习】05:自定义封装界面类

OVERVIEW 自定义封装界面类1.QListWidget2.QTreeWidget3.QTableWidget4.StackedWidget5.Others6.自定义封装界面类-显示效果&#xff08;1&#xff09;添加设计师界面类&#xff08;2&#xff09;在ui中设计自定义界面&#xff08;3&#xff09;在需要使用的界面中添加&#xf…

Docker搭建个人网盘、私有仓库

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker pull owncloud [rootlocalhost ~]# docker run -itd --name mysql --env MYSQL_ROOT_PASSWORD123456 mysql:5.6 [rootlocalhost ~]#…

Python语言实现React框架

迷途小书童的 Note 读完需要 6分钟 速读仅需 2 分钟 1 reactpy 介绍 reactpy 是一个用 Python 语言实现的 ReactJS 框架。它可以让我们使用 Python 的方式来编写 React 的组件&#xff0c;构建用户界面。 reactpy 的目标是想要将 React 的优秀特性带入 Python 领域&#xff0c;…

(动态规划) 剑指 Offer 48. 最长不含重复字符的子字符串 ——【Leetcode每日一题】

❓剑指 Offer 48. 最长不含重复字符的子字符串 难度&#xff1a;中等 请从字符串中找出一个最长的不包含重复字符的子字符串&#xff0c;计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为…

macbookpro如何清理系统数据 macbookpro怎么删除软件

Macbook Pro是苹果公司的一款高性能笔记本电脑&#xff0c;它拥有强大的硬件和流畅的操作系统。然而&#xff0c;随着时间的推移&#xff0c;你可能会发现你的Macbook Pro变得越来越慢&#xff0c;储存空间也越来越紧张。这时候&#xff0c;你需要对你的Macbook Pro进行一些清理…

Linux驱动之platform设备驱动

目录 前言 一、Linux驱动的分离与分层 二、开发环境 三、驱动程序编写 3.2 platform 驱动模块程序 3.3 测试app程序 四、运行测试 4.1 编译 4.2 运行测试 前言 前面几章编写的设备驱动都非常的简单&#xff0c;都是对 IO进行最简单的读写操作。像 I2C、SPI、 LCD 等这…

Ansible 创建使用角色

使用 Ansible Galaxy 和要求文件 /ansible/roles/requirements.yml 。从以下 URL 下载角色并安装到 /ansible/roles &#xff1a; http://materials/haproxy.tar 此角色的名称应当为 balancer http://materials/phpinfo.tar 此角色的名称应当为 phpinfo #创建 vim /ansible/r…

leetcode3. 无重复字符的最长子串(滑动窗口 - java)

滑动窗口 无重复字符的最长子串滑动窗口 上期经典 无重复字符的最长子串 难度 - 中等 3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc…

MySQL详细安装与配置

免安装版的Mysql MySQL关是一种关系数据库管理系统&#xff0c;所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言&#xff0c;其特点为体积小、速度快、总体拥有成本低&#xff0c;尤其是开放源码这一特点&#xff0c;在 Web 应用方面 MySQL 是最好的 RDBMS(Relation…

postman访问ruoyi后台接口

打开若依页面&#xff0c;登录进去&#xff0c;F12打开控制台&#xff0c;选一个后台服务&#xff0c;把下图两个节点&#xff0c;补到postman请求header里面即可

Day46|leetcode 139.单词拆分

leetcode 139.单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 视频链接&#xff1a;动态规划之完全背包&#xff0c;你的背包如何装满&#xff1f;| LeetCode&#xff1a;139.单词拆分_哔哩哔哩_bilibili 题目概述 给你一个字符串 s 和一…

关于ios Universal Links apple-app-site-association文件 Not Found的问题

1. 背景说明 1.1 Universal Links 是什么 Support Universal Links 里面有说到 Universal Links 是什么、注意点、以及如何配置的。简单来说就是 当您支持通用链接时&#xff0c;iOS 用户可以点击指向您网站的链接&#xff0c;并无缝重定向到您安装的应用程序 大白话就是说&am…

【算法训练-链表】反转链表、区间反转链表、K个一组反转链表

从今天开始进行高频算法的训练&#xff0c;一方面训练自己的逻辑思维&#xff0c;一方面保持自己的竞争力。训练过程有这么两个基准原则&#xff1a; 首先训练题的来源呢有三个&#xff0c;首选的是三个都出现过的高频题&#xff0c;以&#xff1a;牛客101为基准分类&#xff…