在.NET Core中使用EF Core进行分页是一个比较常见的需求,可以通过一下步骤实现:

  1.定义一个PageLoad类,用于包含分页结果返回给客户端:

  public class PageLoad<T>

  {

    public int TotalCount {get;set;}

    public int CurrentPage {get;set;}

    public int PageSzie {get;set;}

    public List<T> data {get;set;}

    public int TotalPages=>(int)Math.Ceiling((decimal) TotalCount/PageSize);

    //是否有上一页

    public bool HasPreviousPage=>CurrentPage>1;

    public bool HasNextPage=>CurrentPage<TotalCount;

  }

  2、在数据访问层中封装一个方法,用于返回分页结果:

  public async Task<PageLoad<T>> GetPagedAsync<T> (IQueryable<T> query,int pageIndex,int pageSize)

  {

    var result=new PageLoad<T>

    {

      TotalCount=await query.CountAsync(),

      CurrentPage=pageIndex,

      PageSize=pageSize,

      data=await query.Skip((pageIndex-1)*pageSize).Take(pageSize).ToListAsync()

    };

    return result;

  }

  3、在服务层中调用数据访问层方法,获取分页结果:

  public async  Task<PageLoad<MyClass>> GetMyClassAsync(int pageIndex,int pageSize)

  {

    var query=_context.MyClass.AsQueryable();

    var result=await _repository.GetPagedAsync(query,pageIndex,pageSize);

    return result;

  }

综上所诉,使用EF Core进行分页的关键在于封装一个可用的方法,该方法接受按指定顺序排序的IQueryable,并返回一个带有分页信息分PageLoad对象。客户端可以通过将分页信息与分页结果结合使用来呈现分页数据。