在.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对象。客户端可以通过将分页信息与分页结果结合使用来呈现分页数据。