当前位置: 代码网 > it编程>数据库>大数据 > DeveloperSharp 高效分页使用详解

DeveloperSharp 高效分页使用详解

2024年05月19日 大数据 我要评论
正文支持.net/.net core/.net framework,可以部署在docker, windows, linux, mac。数据分页,几乎是任何应用系统的必备功能。但当数据量较大时,分页操作

正文

支持.net/.net core/.net framework,可以部署在docker, windows, linux, mac。

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

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

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

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

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

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

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

◆◆第一种方案如下◆◆

从nuget引入developersharp包,初始化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
     (2)int pagesize  --  页面大小
     (3)int pageindex    --  当前页码
返回:pagepiece   --  页片实体
pagepartition
声明:pagepiece<list<t>> pagepartition<t>(iqueryable<t> datalist, int pagesize, int pageindex) where t : class
用途:分页功能
参数:(1)iqueryable<t> datalist   --  需要分页的iqueryable
     (2)int pagesize  --  页面大小
     (3)int pageindex    --  当前页码
返回:pagepiece   --  页片实体
pagepartition
声明:pagepiece<list<t>> pagepartition<t>(list<t> datalist, int pagesize, int pageindex) where t : class
用途:分页功能
参数:(1)list<t> datalist   --  需要分页的list
     (2)int pagesize  --  页面大小
     (3)int pageindex    --  当前页码
返回: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中新建一个控制台工程。然后,我们做如下三个操作。

【第一步】:从nuget引用developersharp包。

【第二步】:创建一个用来与数据库进行通信的“数据源类”(文本示例为: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.extension;//table扩展所在的命名空间(.net6/vs2022用户,则需要在.csproj文件中的<itemgroup>下添加<using>标签)
-----------------------------
    class program
    {
        static void main(string[] args)
        {
            testdata td = new testdata();

            //分页
            var pp = td.pagepartition("select top 5000 * 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)
用途:分页功能(有主键)
参数:(1)string recordset     --需要分页的记录集,可以是表、视图、或者sql语句
(2)string id     --主键
(3)int pagesize     --页面大小
(4)int pageindex     --当前页码
返回:pagepiece  --页片实体

pagepartition
声明:public pagepiece pagepartition(string recordset, int pagesize, int pageindex)
用途:分页功能(无主键)
参数:(1)string recordset     -- 需要分页的记录集,可以是表、视图、或者sql语句
     (2)int pagesize    --页面大小
(3)int pageindex    --当前页码
返回:pagepiece  --页片实体

注意:

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

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

以上就是developersharp 高效分页使用详解的详细内容,更多关于developersharp 高效分页的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com