Linq的分页

真有趣。数据库

C#里面的List对象、set对象,均可以直接使用Linq(这是由于,它们都实现了接口IEnumable?),好比说:Where()、OrderBy()什么的。假若有点SQL基础的人,一看这些方法,会以为很亲切。this

在ORM、EF以前,咱们操做数据库,主要是在DAL里写SQL,而后调用各类SqlHelper。如今好了,数据库与开发代码分离,上帝的归上帝,凯撒的还给凯撒,代码里面只操做各类对象了,直接的select * from 叉叉 where 叉叉 order by 叉叉没有了,代之以:对象

lisObj.Where(m=>m叉叉).OrderBy(m=>m.Id)blog

呵呵,不过还别说,linq用来就是爽。我开始习惯,并忍不住愈来愈喜欢了。接口

now,如今使用Entity Framwork,各类对象都直接使用linq,那么分页该怎么处理呢?ip

答案是将Skip()和Take()两个方法结合使用:开发

Skip((pageIndex - 1) * pageSize):忽略当前页以前的记录it

Take(pageSize):读取指定数量的记录,也就是当前页的记录class

完整示例:基础

 

     IList<Test> list = this.DbContext.Set<Test>()
    .Where(m => m.ProjectID == projectId && m.Assigner == assigner)
    .OrderByDescending(m => m.ID)
    .Skip((pageIndex - 1) * pageSize)
    .Take(pageSize)
    .ToList();  
相关文章
相关标签/搜索