• IQueryable简单分页的扩展方法


    IQueryable简单分页的扩展方法 ,废话不多说,直接上干货!

    /// <summary>
        /// 分页列表
        /// </summary>
        public class Page<T>
        {
            public Page()
            {
    
            }
            public Page(List<T> items, int pageIndex, int pageSize, int totalCount)
            {
                PageIndex = pageIndex;
                PageSize = pageSize;
                Total = totalCount;
                PageTotal = (int)Math.Ceiling(totalCount / (double)pageSize);
                Items = items;
            }
    
            /// <summary>
            /// 当前页码
            /// </summary>
            public int PageIndex { get; set; }
    
            /// <summary>
            /// 每页记录数
            /// </summary>
            public int PageSize { get; set; }
    
            /// <summary>
            /// 总记录数
            /// </summary>
            public int Total { get; set; }
    
            /// <summary>
            /// 总页数
            /// </summary>
            public int PageTotal { get; set; }
    
            /// <summary>
            /// 分页数据
            /// </summary>
            public List<T> Items { get; set; }
        }
    

      

    public static class PagedListExtensions
        {
            /// <summary>
            /// PagedList
            /// </summary>
            /// <param name="query"></param>
            /// <param name="pageIndex">1为起始页</param>
            /// <param name="pageSize"></param>
            /// <param name="cancellationToken"></param>
            public static async Task<Page<T>> ToPagedListAsync<T>(
                this IQueryable<T> query,
                int pageIndex,
                int pageSize,
                CancellationToken cancellationToken = default)
            {
                if (pageIndex < 1) throw new ArgumentOutOfRangeException(nameof(pageIndex));
                int realIndex = pageIndex - 1;
                int count = await query.CountAsync(cancellationToken).ConfigureAwait(false);
                var items = await query.Skip(realIndex * pageSize)
                                       .Take(pageSize)
                                       .ToListAsync(cancellationToken)
                                       .ConfigureAwait(false);
                return new Page<T>(items, pageIndex, pageSize, count);
            }
    
            public static Page<T> ToPagedList<T>(
                this IQueryable<T> query,
                int pageIndex,
                int pageSize)
            {
                if (pageIndex < 1) throw new ArgumentOutOfRangeException(nameof(pageIndex));
                int realIndex = pageIndex - 1;
                int count = query.Count();
                var items = query.Skip(realIndex * pageSize)
                                 .Take(pageSize)
                                 .ToList();
                return new Page<T>(items, pageIndex, pageSize, count);
            }
        }
    

      

  • 相关阅读:
    Google Chrome 自定义协议(PROTOCOL)问题的处理
    C# 6.0/7.0 的新特性
    MySQL 5.7.18 压缩包版配置记录
    nginx.conf文件内容详解
    博客添加动态动漫妹子
    TypeScript 3.8beta版
    微信浏览器H5开发常见的坑
    Babel7知识梳理
    雅虎前端优化35条规则
    webpack
  • 原文地址:https://www.cnblogs.com/51net/p/15970014.html
Copyright © 2020-2023  润新知