数据库查询和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分页和魔方分页需要

高级查询与分页