.NET集成DeveloperSharp实现数据分页

  • .NET集成DeveloperSharp实现数据分页已关闭评论
  • 107 次浏览
  • A+
所属分类:.NET技术
摘要

数据分页,几乎是任何应用系统的必备功能。但当数据量较大时,分页操作的效率就会变得很低。大数据量分页时,一个操作耗时5秒、10秒、甚至更长时间都是有可能的,但这在用户使用的角度是不可接受的……

数据分页,几乎是任何应用系统的必备功能。但当数据量较大时,分页操作的效率就会变得很低。大数据量分页时,一个操作耗时5秒、10秒、甚至更长时间都是有可能的,但这在用户使用的角度是不可接受的……

 

数据分页往往有三种常用方案。

第一种,把数据库中存放的相关数据,全部读入代码/内存,再由代码对其进行分页操作。

第二种,直接在数据库中对相关数据进行分页操作,再把分页后的数据输出给代码程序。

第三种,先把数据库中的相关数据全部读入“缓存”,再由代码程序对“缓存”中的数据进行读取+分页操作。

 

本文下面重点阐述第一种与第二种两个解决方案,它们也都是直接基于“数据库”的。

(第三种方案虽然速度较快,但由于需要用到“缓存”这类第三方工具,且在有数据更改时需要较复杂的“数据库-缓存”同步操作,故本文暂不详述。)

 

◆◆第一种方案如下◆◆

从NuGet引入DeveloperSharp包,然后像如下那样使用分页功能:

using DeveloperSharp.Extension; --------------------------  var Page1 = DataAll.PagePartition(20, 5);

其中,要被分页的DataAll对象可以是List<T>、IQueryable<T>、IEnumerable<T>、等任何集合类型。

PagePartition方法的第一个参数是“页大小”,第二个参数是“页序号”,即:PagePartition<T>(int pageSize, int pageIndex)

分页后的返回值Page1的类型是:PagePiece<IEnumerable<T>>,它包含分页后的数据集、总页数、总数据、当前页码、等等一系列“分页”后经常会用到的数据。PagePiece<IEnumerable<T>>对象内包含的属性的详细说明如下:

DataList 声明:public IEnumerable<T> DataList; 用途:IEnumerable<T> --当前页的数据  PageSize 声明:public int PageSize; 用途:int --页面大小  TotalPageNumber 声明:public int TotalPageNumber; 用途:int --总页数  TotalRecordNumber 声明:public int TotalRecordNumber; 用途:int --记录总数  CurrentStartIndex 声明:public int CurrentStartIndex; 用途:int --当前页的记录起始编号  CurrentEndIndex 声明:public int CurrentEndIndex; 用途:int --当前页的记录结束编号  CurrentPageSize 声明:public int CurrentPageSize; 用途:int --当前页的记录数量  CurrentPageIndex 声明:public int CurrentPageIndex; 用途:int --当前页码

以上,即是全网最简单的“分页”方法。此方法不仅简单,还有两大额外好处。

其一是:方法返回对象中,已自动包含了“分页”后后续操作所需的全部相关数据(见上述8个),不需再做额外计算处理。

其二是:此方法已自动处理过传入“页序号”为负数、或、大于总页数、等等意外情况,可安心使用。

 

 

◆◆第二种方案如下◆◆

请参考“高效分页(续)”这篇文章