C# EntityFrameworkCore 分页

使用

public static PagedList<FrameWorkInfo> GetFrameWorks(int pageIndex = 1, int pageSize = 20)
{
    var db = new DefaultDbContext();
    return db.FrameWorkInfos
        .Where(a => a.IsDeleted == false)
        .ToPagedList(pageIndex, pageSize);
}

Extensions

using System.Collections.Generic;

namespace Demo.Model
{
    public class PagedList<TEntity>
        where TEntity : new()
    {
        /// <summary>
        /// 页码
        /// </summary>
        public int PageIndex { get; set; }

        /// <summary>
        /// 页容量
        /// </summary>
        public int PageSize { get; set; }

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

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

        /// <summary>
        /// 当前页集合
        /// </summary>
        public IEnumerable<TEntity> Items { get; set; }

        /// <summary>
        /// 是否有上一页
        /// </summary>
        public bool HasPrevPages { get; set; }

        /// <summary>
        /// 是否有下一页
        /// </summary>
        public bool HasNextPages { get; set; }
    }

    public class PagedList : PagedList<object>
    {
    }
}

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using CheckFrameWorkVersion.Model;
using Microsoft.EntityFrameworkCore;

namespace Demo.MyExtensions
{
    public static class PagedQueryableExtensions
    {
        public static PagedList<TEntity> ToPagedList<TEntity>(this IQueryable<TEntity> entities, int pageIndex = 1,
            int pageSize = 20)
            where TEntity : new()
        {
            if (pageIndex <= 0)
                throw new InvalidOperationException($"{nameof(pageIndex)} must be a positive integer greater than 0.");

            var totalCount = entities.Count();
            var items = entities.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);

            return new PagedList<TEntity>
            {
                PageIndex = pageIndex,
                PageSize = pageSize,
                Items = items,
                TotalCount = totalCount,
                TotalPages = totalPages,
                HasNextPages = pageIndex < totalPages,
                HasPrevPages = pageIndex - 1 > 0
            };
        }

        public static async Task<PagedList<TEntity>> ToPagedListAsync<TEntity>(this IQueryable<TEntity> entities,
            int pageIndex = 1, int pageSize = 20, CancellationToken cancellationToken = default)
            where TEntity : new()
        {
            if (pageIndex <= 0)
                throw new InvalidOperationException($"{nameof(pageIndex)} must be a positive integer greater than 0.");

            var totalCount = await entities.CountAsync(cancellationToken);
            var items = await entities.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync(cancellationToken);
            var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);

            return new PagedList<TEntity>
            {
                PageIndex = pageIndex,
                PageSize = pageSize,
                Items = items,
                TotalCount = totalCount,
                TotalPages = totalPages,
                HasNextPages = pageIndex < totalPages,
                HasPrevPages = pageIndex - 1 > 0
            };
        }
    }
}



版权声明:本文为qq_37214567原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。