数据库查询和Web接口请求,都需要分页功能。PageParameter 提供标准化分页模型能力,它是XCode分页查询数据的标准,也是魔方web接口分页标准。
Nuget包:NewLife.Core
源码:https://github.com/NewLifeX/X/blob/master/NewLife.Core/Data/PageParameter.cs
视频:https://www.bilibili.com/video/BV1We4y1E7Y1
基本结构
分页与排序是核心功能属性
/// <summary>获取 或 设置 排序字段,前台接收,便于做安全性校验</summary> public virtual String Sort { get; set; } /// <summary>获取 或 设置 是否降序</summary> public virtual Boolean Desc { get; set; } /// <summary>获取 或 设置 页面索引。从1开始,默认1</summary> /// <remarks>如果设定了开始行,分页时将不再使用PageIndex</remarks> public virtual Int32 PageIndex { get; set; } = 1; /// <summary>获取 或 设置 页面大小。默认20,若为0表示不分页</summary> public virtual Int32 PageSize { get; set; } = 20;
另外还需要用到一些辅助属性
/// <summary>获取 或 设置 总记录数</summary> public virtual Int64 TotalCount { get; set; } /// <summary>获取 页数</summary> public virtual Int64 PageCount { get; } /// <summary>获取 或 设置 组合起来的排序字句。如果没有设置则取Sort+Desc,后台设置,不经过安全性校验</summary> public virtual String OrderBy { get; set; } /// <summary>获取 或 设置 开始行</summary> /// <remarks>如果设定了开始行,分页时将不再使用PageIndex</remarks> public virtual Int64 StartRow { get; set; } = -1; /// <summary>获取 或 设置 是否获取总记录数,默认false</summary> public Boolean RetrieveTotalCount { get; set; } /// <summary>获取 或 设置 状态。用于传递统计、扩展查询等用户数据</summary> public virtual Object State { get; set; } /// <summary>获取 或 设置 是否获取统计,默认false</summary> public Boolean RetrieveState { get; set; }
TotalCount 用于存储满足查询条件的总行数,用于计算总页数。
PageCount 总页数,实际上由TotalCount和PageSize计算得来。
OrderBy 用于更复杂的排序表达式。
StartRow 用于特殊场景下的分页方式。
RetrieveTotalCount 指示FindAll内部是否查询总行数,并在TotalCount中存放结果。
RetrieveState 和 State 指示FindAll内部是否查询统计数据,并且在State中存放结果。
总结
PageParameter 主要为了满足XCode分页和魔方分页需要