using System;
using System.Collections.Generic;
namespace Dpz.Core.Web.Pager;
/// <summary>
/// 分页数据包装类
/// </summary>
/// <typeparam name="T"></typeparam>
public class PagedListWarp<T>
{
public PagedListWarp() { }
public PagedListWarp(int currentPageIndex, int pageSize, int totalItemCount, List<T> items)
{
CurrentPageIndex = currentPageIndex;
PageSize = pageSize;
TotalItemCount = totalItemCount;
Items = items;
}
/// <summary>
/// 当前页索引
/// </summary>
public int CurrentPageIndex { get; set; }
/// <summary>
/// 每页显示的记录数
/// </summary>
public int PageSize { get; set; }
/// <summary>
/// 要分页的数据总数
/// </summary>
public int TotalItemCount { get; set; }
/// <summary>
/// 总页数
/// </summary>
public int TotalPageCount => (int)Math.Ceiling(TotalItemCount / (double)PageSize);
/// <summary>
/// 开始记录索引
/// </summary>
public int StartItemIndex => (CurrentPageIndex - 1) * PageSize + 1;
/// <summary>
/// 结束记录索引
/// </summary>
public int EndItemIndex =>
TotalItemCount > CurrentPageIndex * PageSize ? CurrentPageIndex * PageSize : TotalItemCount;
/// <summary>
/// 当前页数据
/// </summary>
public List<T> Items { get; set; }
/// <summary>
/// 转换为PagedList对象
/// </summary>
/// <returns></returns>
public PagedList<T> ToPagedList()
{
return new PagedList<T>(Items, CurrentPageIndex, PageSize, TotalItemCount);
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个通用的分页数据包装类 PagedListWarp
主要职责
- 保存分页参数与结果:CurrentPageIndex(当前页索引)、PageSize(每页条数)、TotalItemCount(总记录数)和当前页的 Items(数据集合)。
- 提供与分页相关的计算属性:TotalPageCount、StartItemIndex、EndItemIndex。
- 提供一个转换方法 ToPagedList,把当前包装转换为另一个类型 PagedList
(假定项目中有该类)。
构造函数
- 默认无参构造函数。
- 带参构造函数:PagedListWarp(int currentPageIndex, int pageSize, int totalItemCount, List
items),用于一次性初始化所有字段。
公开属性与含义
- CurrentPageIndex:当前页索引(代码按 1 为第一页的习惯来计算)。
- PageSize:每页显示的记录数。
- TotalItemCount:要分页的数据总数。
- Items:当前页的数据(List
)。
计算属性
- TotalPageCount => (int)Math.Ceiling(TotalItemCount / (double)PageSize)
- 总页数,使用向上取整确保部分页也计为一页。
- StartItemIndex => (CurrentPageIndex - 1) * PageSize + 1
- 当前页的首条记录的全局索引(基于 1 的索引)。例如第 1 页时为 1,第 2 页时为 PageSize + 1。
- EndItemIndex => TotalItemCount > CurrentPageIndex * PageSize ? CurrentPageIndex * PageSize : TotalItemCount
- 当前页的末条记录的全局索引(取当前页末尾或总数中较小者)。
方法
- ToPagedList():把本包装转换为 PagedList
实例(需要项目中存在 PagedList 的实现),构造器参数顺序为 Items, CurrentPageIndex, PageSize, TotalItemCount。
使用示例
- 假设 pageIndex=2, pageSize=10, total=35,则:
- TotalPageCount = 4
- StartItemIndex = 11
- EndItemIndex = 20
注意事项和改进建议
- PageSize 为 0 会导致 TotalPageCount 抛出除以 0 异常,应在构造或属性访问前验证并确保 PageSize > 0。
- CurrentPageIndex 小于 1 时,StartItemIndex 可能为非正数,建议约束 CurrentPageIndex >= 1。
- TotalItemCount 负值不合理,建议保证 TotalItemCount >= 0。
- Items 可能为 null,实际使用时可将其默认为空列表以避免空引用。
- ToPagedList() 依赖外部的 PagedList
类型,需确保该类型的存在和构造签名一致。
可选改进示例(伪代码)
- 在构造函数或属性里做参数验证/修正(把 PageSize <= 0 改为 1 或抛出异常;把 CurrentPageIndex < 1 改为 1 等)。
- 将 Items 初始化为 new List
() 以避免 null。
总之,这个类是一个典型的用于封装分页结果的 DTO/VO,提供了方便获取总页数、当前页起止记录索引和把数据转换为其他分页类型的方法。
AI 正在分析代码…
评论加载中...