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

这篇具有很好参考价值的文章主要介绍了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));
            }
        }
    }
}

程序运行如图:

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

 文章来源地址https://www.toymoban.com/news/detail-677454.html

到了这里,关于C#获取DataTable的前N行数据然后按指定字段排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot Mybatis 自定义顺序排序查询,指定某个字段

    与本文无关  \\\"我进去了\\\"  ....... 今天要讲些什么?  其实很简单,就是查询数据的时候,想根据自己指定的字段的自定义顺序,做排序查询数据。 本篇文章会讲到的几个点 : 1. 单纯sql 怎么实现 排序 2. 单纯sql 怎么实现 自定义排序 3. 结合java ,怎么排序 4. 结合mybatis 怎么把

    2024年02月08日
    浏览(46)
  • c# 实现sql查询DataTable数据集 对接SqlSugar ORM

    有时候对于已经查询到的数据集,想要进行二次筛选或者查询,还得再查一遍数据库 或者其他的一些逻辑处理不太方便,就想着为什么不能直接使用sql来查询DataTable呢? 搜索全网没找到可用方案,所以自己实现了一个。 主要实现思路是使用 SQLite In-Memory Database 内存数据库,

    2024年02月12日
    浏览(37)
  • java通用实现List<自定义对象>中指定字段和指定排序方式

    Person类: 工具类: 结果:

    2024年02月04日
    浏览(45)
  • Elasticsearch 核心技术(九):搜索结果处理(分页、排序、指定返回字段、去重、高亮显示)

    ❤️ 博客主页:水滴技术 🚀 支持水滴: 点赞 👍 + 收藏 ⭐ + 留言 💬 🌸 订阅专栏:大数据核心技术从入门到精通

    2023年04月13日
    浏览(85)
  • C#创建DataTable并填充数据,按钮事件实现全选,并到全选的值。wpf开发

    wpf开发中,用事件创建一个datatable度填充到datagird里面,在datagrid里面有第一列是复选框。用一单击事件实现全选,用一个按钮事件得到所选中的值。 Window x:Class=\\\"WpfApp4.MainWindow\\\"         xmlns=\\\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\\\"         xmlns:x=\\\"http://schemas.microsoft.com

    2024年02月08日
    浏览(36)
  • MyBatis-Plus条件构造器[常用的模糊查询、排序查询、逻辑查询和指定字段查询案例]

    Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客  Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客 MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作(通过id更新和条件更新)_心态还需努力呀的博客

    2024年02月06日
    浏览(90)
  • 001:如何获取A股个股的前复权K线数据

    以获取京泉华最近一年的前复权K线数据为例: 新建文件main.py,内容如下: 用python3执行,执行后得到文件002885.csv。 done!!

    2024年02月07日
    浏览(33)
  • Oracle数据库在指定字段后新增字段

    记录一下数据库中为表增加字段,且在指定字段后新增; mysql数据库的话比较简单通过一下sql语句即可实现: 而Oracle数据库不支持上述语法,添加字段只能显示到最后一位,所以如果非要添加字段到指定字段后的话可以通过新建数据表并修改表明实现,如下面语句所示:

    2024年02月15日
    浏览(54)
  • elasticsearch删除脏数据(根据指定字段删除数据)

    es中出现几条脏数据,现在要把这几条数据直接删掉 找到要删除的脏数据,一般是根据id之类的字段来删除,因为id具有唯一性,其实和mysql差不多 1、先查到该条记录(注意我们这边使用的是 ticketId字段,因为他具有唯一性,方便查询) 返回结果 2、接下来就把 ticketId 为 fd

    2024年02月16日
    浏览(36)
  • jsonpath提取字段某个字段为指定值的其他字段数据&提取某个字段的所有值

    1.jsonpath提取某个字段为指定值的其他字段数据 [ [ { “code”: “a255e81dc5a5442e”, “name”: “原始货号”, “values”: [ { “code”: “223e768a1b18b64c”, “attrCode”: “a255e81dc5a5442e”, “displayName”: “P11”, “frontName”: “P11”, “images”: [], “originCode”: “P11” } ], “originCode”: “

    2024年01月23日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包