A generic pagination class

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.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324971817&siteId=291194637