using Dpz.Core.Web.Pager;

namespace Dpz.Core.Web.Models;

public class Pagination<T>
    where T : new()
{
    /// <summary>
    /// 当前页
    /// </summary>
    public int CurrentPage { get; set; }

    /// <summary>
    /// 总数
    /// </summary>
    public int TotalCount { get; set; }

    /// <summary>
    /// 每页记录数0
    /// </summary>
    public int PageSize { get; set; }

    /// <summary>
    /// 总页数
    /// </summary>
    public int TotalPages { get; set; }

    /// <summary>
    /// 开始索引
    /// </summary>
    public int StartItemIndex { get; set; }

    /// <summary>
    /// 结束索引
    /// </summary>
    public int EndItemIndex { get; set; }

    /// <summary>
    /// 数据
    /// </summary>
    public List<T> List { get; set; } = [];

    /// <summary>
    /// create pagination object
    /// </summary>
    /// <param name="pagedList"></param>
    /// <returns></returns>
    public static Pagination<T> Create(IPagedList<T> pagedList)
    {
        var pagination = new Pagination<T>
        {
            List = pagedList.ToList(),
            CurrentPage = pagedList.CurrentPageIndex,
            TotalCount = pagedList.TotalItemCount,
            PageSize = pagedList.PageSize,
            TotalPages = pagedList.TotalPageCount,
            StartItemIndex = pagedList.StartItemIndex,
            EndItemIndex = pagedList.EndItemIndex,
        };
        return pagination;
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个用于处理分页数据的泛型模型类,主要用于Web应用程序中的分页功能。让我详细解释一下这个代码:

类定义和约束

public class Pagination<T> where T : new()
  • 这是一个泛型类,T 代表要分页的数据类型
  • where T : new() 约束表示类型 T 必须有无参构造函数

属性说明

分页基本信息

  • CurrentPage: 当前页码
  • TotalCount: 数据总记录数
  • PageSize: 每页显示的记录数
  • TotalPages: 总页数

索引信息

  • StartItemIndex: 当前页第一条记录在总数据中的索引位置
  • EndItemIndex: 当前页最后一条记录在总数据中的索引位置

数据容器

  • List: 存储当前页的实际数据,使用了C# 12的新语法 = [] 初始化空集合

静态工厂方法

public static Pagination<T> Create(IPagedList<T> pagedList)

这个方法的作用是:

  1. 数据转换: 将 IPagedList<T> 接口的实现转换为 Pagination<T> 对象
  2. 属性映射: 将分页接口中的各种属性值映射到 Pagination 对象的对应属性
  3. 数据提取: 通过 pagedList.ToList() 将分页数据转换为 List 集合

使用场景

这个类通常用于:

  • API响应: 将分页查询结果封装后返回给前端
  • 数据传输: 在不同层之间传递分页信息
  • 视图渲染: 在MVC模式中向视图传递分页数据

设计优势

  1. 类型安全: 泛型设计确保编译时类型检查
  2. 信息完整: 包含了分页所需的所有关键信息
  3. 易于使用: 提供静态工厂方法简化对象创建
  4. 框架集成: 与 Dpz.Core.Web.Pager 框架良好集成

这是一个典型的分页数据传输对象(DTO),用于在Web应用中标准化分页数据的处理和传输。

评论加载中...