I use a general paging class in the project, it feels very useful, share it, and come directly to the code:
//----------------------------------------------------------------------- // <copyright file="StandardPageResult" company="FenSiShengHuo, Ltd."> // Copyright (c) 2018 , All rights reserved. // </copyright> //----------------------------------------------------------------------- namespace DotNet.MVC.Infrastructure.Paging { /// <summary> /// Paging result entity /// </summary> public class PageResult { /// <summary> /// 状态 /// </summary> public bool Status { get; set; } = true; /// <summary> /// Messages /// </summary> public string StatusMessage { get; set; } /// <summary> /// Current page /// </summary> public int PageIndex { get ; set ; } /// <summary> /// Size per page /// </summary> public int PageSize { get ; set ; } /// <summary> /// Total data /// </summary> public int TotalCount { get ; set ; } /// <summary> /// 总页数 /// </summary> public int TotalPages { get; set; } /// <summary> /// Is there a previous page /// </summary> public bool HasPreviousPage => (PageIndex > 0 ); /// <summary> /// Is there a next page /// </summary> public bool HasNextPage => (PageIndex + 1 < TotalPages); } /// <summary> /// 分页数据 /// </summary> /// <typeparam name="T"></typeparam> public class PageResult<T> : PageResult { public T Value { get; set; } public PageResult() { } /// <summary> /// The source query from the database is the result of paging /// </summary> /// <param name="source"></param> /// <param name="request "></param> /// <param name="totalCount"></param> public PageResult(T source, PageRequest request, int totalCount) : this () { if (request.PageSize == 0) { return; } TotalCount = totalCount; TotalPages = TotalCount / request.PageSize; if (TotalCount % request.PageSize > 0) TotalPages ++ ; this.PageSize = request.PageSize; this.PageIndex = request.PageIndex; this.Value = source; } } } /// <summary> /// Paging extension method /// </summary> namespace DotNet.MVC.Infrastructure.Paging { public static class PageResultExtension { /// <summary> /// 分页扩展 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="source"></param> /// <param name="request"></param> /// <param name="totalCount"></param> /// <returns></returns> public static PageResult<T> ToPageResult<T>(this T source, PageRequest request, int totalCount) { return new PageResult<T>(source, request, totalCount); } } }
Use method reference
WechatAccountSettingManager manager = new WechatAccountSettingManager(); DataTable dt = manager.GetDataTableByPage(out recordCount, pager.PageIndex, pager.PageSize, conditions, manager.DbHelper.MakeParameters(dbParameters), pager.Sort + " " + pager.SortDirection); List<WechatAccountSettingEntity> list = BaseEntity.GetList<WechatAccountSettingEntity>(dt); PageResult<List<WechatAccountSettingEntity>> result = list.ToPageResult(pager, recordCount);
This paging can output any object in the background, including any collection objects such as List<T>, IList<T>, DataTable, etc.