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

news2024/9/24 21:23:22

获取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));
            }
        }
    }
}

程序运行如图:

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql-InnoDB记录结构

一、InnoDB简介 InnoDB 采取的方式是&#xff1a;将数据划分为若干个页&#xff0c;以页作为磁盘和内存之间交互的基本单位&#xff0c;InnoDB中页的大小一般为 16 KB。也就是在一般情况下&#xff0c;一次最少从磁盘中读取16KB的内容到内存中&#xff0c;一次最少把内存中的1…

Hadoop入门机安装hadoop

0目录 1.Hadoop入门 2.linux安装hadoop 1.Hadoop入门 定义 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。 优势 高可靠性&#xff1a;Hadoop底层维护多…

智慧互联,有序充电--多场景充电

企业微电网能效及充电管理解决方案 安科瑞 崔丽洁 1、企业需求&#xff08;目的地充电&#xff09; 站在企业的角度&#xff0c;除了要主动承担碳达峰、碳中和的社会责任&#xff0c;也需要考虑自身的经营和利润&#xff0c;需要结合企业的现状进行改造 企业微电网平台——与…

OLED透明屏直销:高性价比与便捷购买的首选

OLED透明屏作为一项创新的显示技术&#xff0c;其透明度和高清晰度的特点使其在各个领域得到了广泛应用。 在购买OLED透明屏时&#xff0c;传统的渠道如经销商和代理商可能增加额外的成本和环节。 然而&#xff0c;OLED透明屏的直销模式为消费者提供了更便捷和高性价比的购买…

iOS App逆向之:iOS应用砸壳技术

在iOS逆向&#xff0c;有一项关键的技术叫做“iOS砸壳”&#xff08;iOS App Decryption&#xff09;。自iOS 5版本以来&#xff0c;苹果引入了应用程序加密机制&#xff0c;使得大部分应用都需要进行砸壳操作才能进行逆向分析。因此作为开发者、逆向工程师和安全研究人员都需要…

PostgreSQL下载路径与安装步骤

PgSQL介绍 PgSQL和MySQL一样是一种关系模型的数据库&#xff0c;全称为PostgreSQL 数据库。 优势&#xff1a;PgSQL是一种可扩展、可靠、可定制的数据库管理系统&#xff0c;具有良好的数据完整性和安全性&#xff0c;支持多种操作系统&#xff0c;包括 Linux、Windows、MacOS …

每日汇评:尽管乐观情绪持续,原油价格仍失去控制

1、由于市场等待美联储的意见&#xff0c;原油价格正在停滞不前&#xff1b; 2、疲弱的美国PMI数据似乎盖过了EIA库存数据&#xff1b; 3、市场准备从美联储那里寻找线索,美原油会突破支撑位吗? 在美国数据令人失望之后&#xff0c;原油价格在隔夜下跌&#xff0c;这导致市场…

API接口开发管理平台--多领域企业数字化管理的解决方案

随着数字化时代的到来&#xff0c;企业需要进行数字化转型才能更好地适应市场需求和用户需求。而API接口则是数字化转型中的重要组成部分&#xff0c;可以帮助企业更好地管理信息&#xff0c;提高效率。本文将介绍一种解决方案--API接口开发管理平台&#xff0c;该平台开发出多…

如何将IP定位SDK添加到您的 Android 应用程序

IP定位的功能加入对于APP开发者及运营者有着重要作用&#xff0c;主要用于阻止恶意访问、用户来源分析、个性化内容推送等多个方面。通过API接口您可以准确快速地查询IP地址的归属地、宿主信息、应用场景、Whois等网络空间地图数据。通过埃文科技提供的软件开发工具包(SDK)&…

专业磁力种子下载工具 qBittorrent 安装架设教程linux开启24小时挂机下载

专业磁力种子下载工具 qBittorrent 安装架设教程linux开启24小时挂机下载 大家好我是艾西&#xff0c;今天跟大家分享一个下载工具又是涨知识的一天&#xff01; 前言 有时候需要通过种子下载点P2P资源&#xff0c;在国内&#xff0c;一般我们都是用迅雷。但是迅雷的反吸血太…

【TPC开证报错】-出库单数据无法匹配【成品产出单明细】

今天可信平台有个证书无法开证&#xff0c;送审报错。 其实业务逻辑是销售出库的单据&#xff0c;也会有个成品入库单。 成品入库单里面的所有箱码&#xff0c;都需要包装记录。 这个就是MES系统里的包装报工&#xff08;之前自动化缺失的包装数据&#xff0c;曾经导过一次。…

5 个适用于 Windows 的最佳屏幕录制软件

如果您是 Windows 用户&#xff0c;您可能遇到过“打印屏幕”按钮并不总是能够捕获屏幕截图的情况。这就是可靠的屏幕截图工具可以派上用场的地方。 屏幕截图工具是一种软件应用程序&#xff0c;可让您快速轻松地捕获和保存计算机屏幕的图像。在这篇文章中&#xff0c;我们将重…

Wireshark数据抓包分析之传输层协议(TCP协议)

一、实验目的&#xff1a; 通过使用wireshark对TCP协议的数据包的抓取分析TCP协议的具体内容 二、预备知识: 1.需要了解TCP协议的三次握手过程 2.需要了解TCP协议的四次挥手的过程 三、网络拓扑 四、实验过程&#xff1a; part1&#xff1a;3次握手和4次挥手的数据包的获取 …

自动驾驶SLAM技术第四章习题2

在g2o的基础上改成ceres优化&#xff0c;高博都写好了其他的部分, 后面改ceres就很简单了. 这块我用的是ceres的自动求导&#xff0c;很方便&#xff0c;就是转化为模板仿函数的时候有点麻烦&#xff0c; 代码部分如下 ceres_type.h : ceres优化核心库的头文件 这个文件写的内…

【考研数学】矩阵、向量与线性方程组解的关系梳理与讨论

文章目录 引言一、回顾二、梳理齐次线性方程组非齐次线性方程组 写在最后 引言 两个原因让我想写这篇文章&#xff0c;一是做矩阵题目的时候就发现这三货经常绑在一起&#xff0c;让人想去探寻其中奥秘&#xff1b;另一就是今天学了向量组的秩&#xff0c;让我想起来了之前遗留…

IIS之WEB服务器详解(上)

文章目录 一、WEB服务器介绍二、服务端口号三、WEB服务发布软件四、部署WEB服务器1. 配置静态IP地址2. 安装 IIS-WEB 插件 一、WEB服务器介绍 WEB服务器也称为网页服务器或HTTP服务器&#xff0c;网页服务器大家都能理解&#xff0c;为什么称为HTTP服务器呢&#xff1f; 因为…

Leetcode每日一题:1267. 统计参与通信的服务器

原题 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其…

beego的安装及bee工具的使用

1、beego 的安装 beego 的安装是典型的 Go 安装包的形式&#xff1a; go get github.com/astaxie/beego 常见问题&#xff1a; git 没有安装&#xff0c;请自行安装不同平台的 git&#xff0c;如何安装请自行搜索。 git https 无法获取&#xff0c;请配置本地的 git&#x…

搭建个让你呼吸顺畅-ChatGPT

目录 ChatGPT使用时可能会遇到 1.请待命&#xff0c;我们正在检查您的浏览器... 2. 访问被拒绝。抱歉&#xff0c;您已被阻止 3. ChatGPT 目前已满负荷运转 4. 此内容可能违反我们的内容政策。 5.出了点问题。 6. 蹦字慢吞吞&#xff0c;卡顿不流畅&#xff0c;不知道的…

日志系统——日志器模块

一&#xff0c;日志器模块主体实现 该模块主要是对前边所以模块的整合&#xff08;日志等级模块&#xff0c;日志消息模块&#xff0c;日志格式化模块&#xff0c;日志落地模块&#xff09;&#xff0c;向外提供接口完成不同等级日志的输出。当我们需要使⽤⽇志系统打印log的时…