.NET中大型项目开发必备(8)--高效分页


相关下载:

DeveloperSharp.dll组件
DeveloperSharp.dll组件

高效分页-示例代码(dp8-Paging.rar)
高效分页-示例代码(dp8-Paging.rar)

 

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

 

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

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

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

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

 

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

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

 

◆◆第一种方案如下◆◆

引入DeveloperSharp.dll组件,初始化IUtility工具

using DeveloperSharp.Framework.CoreUtility;
--------------------------

IUtility IU = new Utility();

IUtility内构建有3个重载的分页PagePartition方法:

PagePartition
声明:PagePiece PagePartition(DataTable Table, int PageSize, int PageIndex)
用途:分页功能
参数:(1)DataTable Table   --  需要分页的DataTable
     (2int PageSize  --  页面大小
     (3int PageIndex    --  当前页码(最小值为1)
返回:PagePiece   --  页片实体

PagePartition
声明:PagePiece<List<T>> PagePartition<T>(IQueryable<T> DataList, int pageSize, int pageIndex) where T : class
用途:分页功能
参数:(1)IQueryable<T> DataList   --  需要分页的IQueryable
     (2int PageSize  --  页面大小
     (3int PageIndex    --  当前页码(最小值为1)
返回:PagePiece   --  页片实体

PagePartition
声明:PagePiece<List<T>> PagePartition<T>(List<T> DataList, int pageSize, int pageIndex) where T : class
用途:分页功能
参数:(1)List<T> DataList   --  需要分页的List
     (2int PageSize  --  页面大小
     (3int PageIndex    --  当前页码(最小值为1)
返回:PagePiece   --  页片实体

 

分页方法的返回值PagePiece/PagePiece<T>类,包含分页后的数据集、总页数、总数据、当前页码、等等一系列“分页”后经常会用到的数据。PagePiece/PagePiece<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 --当前页码

Table
声明:public System.Data.DataTable Table;
用途:System.Data.DataTable--当前页的数据表
(或者)
DataList
声明:public List<T> DataList;
用途:List<T>--当前页的数据

 

 

◆◆第二种方案如下◆◆

为了演示“第二种分页方案”如何使用,我们首先在Visual Studio中新建一个控制台工程。然后,我们做如下三个操作。

【第一步】:为工程引用添加 DeveloperSharp.dll组件。

【第二步】:创建一个用来与数据库进行通信的“数据源类”(文本示例为:TestData.cs),内容如下:

using DeveloperSharp.Structure.Model;//DataSource的命名空间
using DeveloperSharp.Framework.QueryEngine;//DatabaseType的命名空间

namespace YZZ
{
    [DataSource(DatabaseType.SQLServer, "Server=localhost;Database=Test;Uid=sa;Pwd=123")]
    public class TestData : DeveloperSharp.Structure.Model.DataLayer
    {
        //类中没有任何代码
    }
}

说 明 :“数据源类”(文本示例为:TestData.cs)必 须 继 承 自 DeveloperSharp.Structure.Model.DataLayer 类 , 并 且 在 其 上 设 置DataSource属 性 的 初 始 化 值 为“数据库类型”及其“链接字符串”。

 

【第三步】:为控制台应用类,添加通过“数据源类”(TestData)调用其PagePartition方法进行数据分页的代码。注 意:核心代码就一行而已!!

代码如下:

using DeveloperSharp.Structure.Model;//PagePiece所在的命名空间
using DeveloperSharp.Extension;//Table扩展所在的命名空间
-----------------------------
    class Program
    {
        static void Main(string[] args)
        {
            TestData td = new TestData();

            //分页
            PagePiece pp = td.PagePartition("select top 500000 * from t_Order where Id>10 order by Id desc", 20, 162);

            List<Product> Products = pp.Table.ToList<Product>();
            foreach (var P in Products)
            {
                Console.WriteLine(P.Name);
            }

            Console.ReadLine();
        }
    }

Product类代码如下:

    public class Product
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public int Quantity { get; set; }
    }

 

此处的PagePartition方法有两个重载方法,其详细功能说明如下:

PagePartition
声明:public PagePiece PagePartition(string RecordSet, string Id, int PageSize, int PageIndex)
用途:分页功能(有主键)
参数:(1string RecordSet     --需要分页的记录集,可以是表、视图、或者SQL语句
(2string Id     --主键
(3int PageSize     --页面大小
(4int PageIndex     --当前页码(最小值为1)
返回:PagePiece  --页片实体

PagePartition
声明:public PagePiece PagePartition(string RecordSet, int PageSize, int PageIndex)
用途:分页功能(无主键)
参数:(1string RecordSet     -- 需要分页的记录集,可以是表、视图、或者SQL语句
     (2int PageSize    --页面大小
(3int PageIndex    --当前页码(最小值为1)
返回:PagePiece  --页片实体

注意:

(1)     当你需要分页的数据表有“主键”字段时,使用“分页功能(有主键)”。反之,使用“分页功能(无主键)”。

(2)     RecordSet是你需要分页的“数据总集”的SQL语句。该SQL语句的形式丰富多样,可以带条件、排序、甚至还能是多表的联合查询、等。

 

【附注】:文章开头给出的下载示例,均已成功运行通过。但下载示例往往只包含“核心模板”内容。有些辅助内容需要自己建立/设置(比如:数据库创建、链接字符串设置、文件配置、路径设置、参数设定、等等...)。
请在理解文章内容的基础上,再做示例实验。若遇异常报错,请仔细阅读+理解本文。
也随时欢迎联系作者,微信扫描文末二维码,获取更多技术支持!

推荐阅读

 

引用来源:https://www.cnblogs.com/DeveloperSharp/p/15824839.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:使用 WPF 做个 PowerPoint 系列 文本 BodyProperties 的 FontScale 与文本字号缩放
下一篇:.NET中大型项目开发必备(5)--Web服务/WebApi的负载均衡
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

.NET大型项目开发必备(8)--高效
.NET大型项目开发必备(6)--IUtility工具介绍
.NET大型项目开发必备(2)--CORS跨域访问
.NET大型项目开发必备(1)--UUID全球通用唯一识别码
.NET大型项目开发必备(4)--数据库的读写分离
.NET大型项目开发必备(12)--使用MQ消息队列
.NET大型项目开发必备(9)--http请求调用(Post与Get)
.NET大型项目开发必备(10)--图片的裁剪、缩放、与加水印
.NET大型项目开发必备(7)--ORM数据库访问技术
.NET大型项目开发必备(5)--Web服务/WebApi的负载均衡
使用.NET 6开发TodoList应用(13)——实现查询
YES-WEB快速开发框架,.NET WEB开发平台,高效的web项目开发框架
EF SQL2008 报错 Featch Next
百亿级数据 分库表 后怎么查询?
.Net 下高性能表分库组件-连接模式原理
使用.NET 6开发TodoList应用(8)——实现全局异常处理
.net core mvc项目JSON统一处理
百亿级数据 分库表 后怎么查询?
.NET Core 项目windows server部署
.net8多环境配置与切换

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理 Linux NAS 远程挂载 飞牛 fnOS S/4HANA SAP GUI SAP HANA SAP R/3 SAP入门 SAP版本 ERP SAP SAP MM 库存管理 物料管理 采购管理 入门教程 SAP S/4HANA SPRO 企业结构 采购组织 MM01 物料主数据 物料类型 BP分组 业务伙伴 供应商主数据 ME41 RFQ 库存物料 采购流程 ME51 消耗性物料 科目分配 采购申请 AC03 ML81N 外部服务 服务主数据 Business Partner SAP培训 ME51N MM模块 Lean Services MM-SRV 外部服务采购 PIR 供应来源 采购主数据 采购信息记录 ME31K 框架协议 计划协议 采购合同 ME01 供应来源确定 货源清单 MEQ1 供应源确定 配额安排 配额评分 MD04 MD21 MRP 计划文件 需求计划 批量程序 MD01N MD02 MRP Live MD05 MM 物料计划 优化采购 供应源 采购订单
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码