测试环境:
.Net 8
使用
public static PagedList<FrameWorkInfo> GetFrameWorks(int pageIndex = 1, int pageSize = 20)
{
var db = new DefaultDbContext();
return db.FrameWorkInfos
.Where(a => a.IsDeleted == false) // 添加一些 where / select
.ToPagedList(pageIndex, pageSize); // 最后调用封装的 ToPagedList
}
PagedQueryableExtensions.cs
using Microsoft.EntityFrameworkCore;
// 还有一些全局 using
namespace Demo.Extensions;
public static class PagedQueryableExtensions
{
/// <summary>
/// 分页拓展
/// </summary>
public static PagedList<TEntity> ToPagedList<TEntity>(this IQueryable<TEntity> entities, int pageIndex = 1, int pageSize = 20)
{
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
};
}
/// <summary>
/// 分页拓展
/// </summary>
public static async Task<PagedList<TEntity>> ToPagedListAsync<TEntity>(this IQueryable<TEntity> entities, int pageIndex = 1, int pageSize = 20, CancellationToken cancellationToken = default)
{
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
};
}
}
/// <summary>
/// 分页泛型集合
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class PagedList<TEntity>
{
/// <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; }
}
/// <summary>
/// 分页集合
/// </summary>
public class PagedList : PagedList<object>
{
}