C#实现集合分页功能详解:从基础到实践

在C#编程中,分页功能对于处理大量数据集合尤为重要。分页允许我们每次只处理集合中的一部分数据,从而提高应用程序的性能和用户体验。本文将详细介绍如何在C#中实现集合的分页功能。

1. 理解分页的基本概念

分页通常涉及以下几个关键参数:

  • 当前页码(PageNumber):用户当前查看的是第几页。
  • 每页数量(PageSize):每页显示的数据项数量。
  • 总数据量(TotalCount):集合中数据项的总数。
  • 总页数(TotalPages):根据每页数量和总数据量计算得出的总页数。
2. 实现分页逻辑

假设我们有一个包含大量数据的集合(例如List<T>),我们将基于上述参数来实现分页功能。

using System;
using System.Collections.Generic;
using System.Linq;public class PaginationHelper<T>
{public List<T> SourceList { get; private set; }public int PageNumber { get; private set; }public int PageSize { get; private set; }public int TotalCount { get; private set; }public int TotalPages { get; private set; }public PaginationHelper(List<T> sourceList, int pageNumber, int pageSize){SourceList = sourceList;PageNumber = pageNumber > 0 ? pageNumber : 1;PageSize = pageSize > 0 ? pageSize : throw new ArgumentOutOfRangeException(nameof(pageSize), "PageSize 必须大于0.");TotalCount = SourceList.Count;TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);}public List<T> GetPagedList(){var skip = (PageNumber - 1) * PageSize;var take = PageSize;var pagedList = SourceList.Skip(skip).Take(take).ToList();return pagedList;}public bool HasPreviousPage => PageNumber > 1;public bool HasNextPage => PageNumber < TotalPages;
}
3. 使用分页帮助类

现在,我们可以使用这个PaginationHelper<T>类来对任何List<T>进行分页。

List<int> numbers = Enumerable.Range(1, 100).ToList(); // 示例数据:1到100的整数
int pageNumber = 2; // 假设用户请求第二页
int pageSize = 10; // 每页显示10个数据项PaginationHelper<int> paginationHelper = new PaginationHelper<int>(numbers, pageNumber, pageSize);
List<int> pagedList = paginationHelper.GetPagedList();Console.WriteLine($"Page {pageNumber} of {paginationHelper.TotalPages}");
foreach (var number in pagedList)
{Console.WriteLine(number);
}Console.WriteLine($"Has Previous Page: {paginationHelper.HasPreviousPage}");
Console.WriteLine($"Has Next Page: {paginationHelper.HasNextPage}");
4. 注意事项
  • 性能考虑:对于非常大的数据集,使用SkipTake可能会导致性能问题,因为它们需要在内存中遍历整个集合。在这种情况下,考虑使用更高效的数据访问技术,如数据库的分页查询。
  • 异常处理:在生产代码中,应添加适当的异常处理逻辑,以处理如页码超出范围等潜在问题。
  • 排序:分页通常与排序一起使用。确保在调用SkipTake之前对集合进行排序。
5. 扩展功能
  • 搜索:可以在分页之前添加搜索功能,以根据用户输入过滤数据。
  • 排序选项:提供多种排序选项,允许用户根据不同的字段进行排序。
  • 分页UI:在用户界面上实现分页控件,如页码按钮、上一页/下一页按钮等。

结论

通过实现PaginationHelper<T>类,我们可以轻松地在C#中对任何List<T>进行分页。这个帮助类提供了基本的分页功能,包括获取分页后的数据列表、检查是否有前一页或后一页等。根据具体需求,还可以进一步扩展和优化这个分页实现。

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

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

相关文章

WinDbg内存泄露追踪

随着win sdk一并安装了&#xff0c;可以在C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 里找到 管理员运行cmd 配置跟踪 cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 gflags.exe设置待跟踪的应用程序 gflags.exe /i D:\XXXX.exe ust运行应用程序&am…

4.1.3 串

文章目录 串的基本概念串的基本操作串的存储结构 串的基本概念 串&#xff0c;仅由字符构成的有限序列。 串长&#xff1a;串中的字符个数。空串&#xff1a;长度为0的串。空格串&#xff1a;一个或多个空格构成的串。子串&#xff1a;串中任意长度连续字符构成的序列。含有字…

RK3588+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案

RK3588FPGA核心板采用Rockchip RK3588新一代旗舰 级八核64位处理器&#xff0c;支持8K视频编解码&#xff0c;多屏4K输出&#xff0c;可实现12屏联屏拼接、同显、异显&#xff0c;适配多种操作系统&#xff0c;广泛适用于展览展示、广告内容投放、新零售、商超等领域实现各种媒…

Unity中 Xlua使用整理(一)

1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包&#xff0c;并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…

MBTiles 及爬取到发布

MBTiles &#xff1a;https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准&#xff0c;该标准的目的是即时传输和使用数据。 作为一个容器格式&#xff0c;MBTiles可以存储任何瓦片数据,…

Clisoft SOS设置Server和Project

Clisoft SOS设置Server和Project 一、关于SOS Servers、Clients、Projects和Work Areas 以下三个图是官方文档中介绍的三种情况 图1&#xff1a;带有两个客户端的SOS服务器 图2&#xff1a;使用本地缓存服务器 图3&#xff1a;远程设计团队的缓存服务器 因为SOS软件需要…

调整Python+Pytest+Allure+Yaml+Pymysql框架中需要执行的用例顺序

当pytest框架中有时时候会因为用例的前后关联关系需要调整用例执行顺序时则可以跟进具体的要求调整pytest.ini配置文件中执行用例文件夹的前后顺序 当如果是需要调整某个文件夹中用例的执行顺序时&#xff0c;则跟进具体的文件调整对应testcases中test_*.py文件中的执行顺序

【Dify】Dify自定义模型设置 | 对接DMXAPI使用打折 Openai GPT 或 Claude3.5系列模型方法详解

一、Dify & DMXAPI 1、Dify DIFY&#xff08;Do It For You&#xff09;是一种自动化工具或服务&#xff0c;旨在帮助用户简化操作&#xff0c;减少繁琐的手动操作&#xff0c;提升工作效率。通过DIFY&#xff0c;用户能够快速完成任务、获取所需数据&#xff0c;并且可以…

C++编程基础之override关键字

在C中&#xff0c;override关键字用于显式地标识派生类中的成员函数是对基类中虚函数的重写&#xff0c;具有以下重要作用和使用说明&#xff1a; 作用 增强代码可读性&#xff1a;通过使用override关键字&#xff0c;能够清晰地向阅读代码的人表明该函数是有意重写基类中的虚…

Redis数据库笔记—— Hash(哈希)的扩容机制(rehash)

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。详细介绍Hash&#xff08;哈希&#xff09;的扩容机制(rehash)、源码、以及扩容和缩容过程。 文章目录 Redis 字典&#xff08;dict&#xff09;结构源码哈希…

支持向量机算法(一):像讲故事一样讲明白它的原理及实现奥秘

1、支持向量机算法介绍 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种基于统计学习理论的模式识别方法&#xff0c; 属于有监督学习模型&#xff0c;主要用于解决数据分类问题。SVM将每个样本数据表示为空间中的点&#xff0c;使不同类别的…

数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)

将有序数组转换为二叉搜索树 https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列请你将其转换为一棵 平衡 二叉搜索树 示例 1 输入&#xff1a;nums [-10,-3,0,5,9…

【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率

&#x1f36c;引言 &#x1f36c;什么是低代码平台&#xff1f; 低代码平台&#xff08;Low-Code Platform&#xff09;是一种使开发人员和业务用户可以通过图形化界面和少量的编程来创建应用程序的开发工具。与传统的编程方式相比&#xff0c;低代码平台大大简化了开发过程&a…

理解 Tomcat 架构与自定义实现

前言 Tomcat 是一个轻量级的 Web 容器&#xff0c;被广泛应用于 Java Web 开发中。通过它&#xff0c;我们可以轻松地部署和运行 Web 应用。在本文中&#xff0c;我们将深入分析 Tomcat 的核心架构&#xff0c;同时结合一段代码&#xff0c;手动实现一个简化的 Tomcat 服务&am…

用户界面软件02

基于表单的用户界面 在“基于表单的用户界面”里面&#xff0c;用户开始时选中某个业务处理&#xff08;模块&#xff09;&#xff0c;然后应用程序就使用一系列的表单来引导用户完成整个处理过程。大型机系统上的大部分用户界面都是这样子的。[Cok97]中有更为详细的讨论。 面…

go如何从入门进阶到高级

针对Go语言的学习&#xff0c;不同阶段应采取不同的学习方式&#xff0c;以达到最佳效果.本文将Go的学习分为入门、实战、进阶三个阶段&#xff0c;下面分别详细介绍 一、社区 Go语言中文网 作为专注于Go语言学习与推广的平台&#xff0c;Go语言中文网为开发者提供了丰富的中…

采用标准化的方式开展设计-研发中运用设计模式

概述 实现规范化、标准化的引导式设计&#xff0c;以业务需求为输入&#xff0c;识别业务特点&#xff0c;并通过引导式设计&#xff0c;找到最适合的设计模式、具体方案&#xff0c;汇总成为应用的设计&#xff0c;拉齐各应用的设计一的致性。 采用标准化的方式开展设计…

Qt之屏幕录制设计(十六)

Qt开发 系列文章 - screencap&#xff08;十六&#xff09; 目录 前言 一、实现原理 二、实现方式 1.创建录屏窗口 2.录屏窗口类定义 3.自建容器对象定义 4.用户使用 5.效果演示 总结 前言 利用Qt实现屏幕录制设计&#xff0c;可以通过使用Qt自带的类QScreen、QPixma…

【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 1. 选择结构基本概念 2. 主要语句类型​&#xff08;if、if-else、switch&#xff09; 3. 跃迁函数中变量的取值范围 4. 计算阶跃函数的值 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&#xff1a;输入x的值&#x…

自定义字典转换器用于easyExcel 导入导出

文章目录 引言I 字典转换器、注解、序列化器注解定义自定义字典转换器用于easyExcel 导入导出自定义字典序列化器II 字典存储设计数据库表结构redis缓存引言 需求导入Excel时,根据字典内容或者字段编码转换 导出Excel时,根据字典内容或者字段编码转换 接口响应数据序列化时,…