天天看點

Linq的分頁

真有趣。

C#裡面的List對象、set對象,都可以直接使用Linq(這是因為,它們都實作了接口IEnumable?),比如說:Where()、OrderBy()什麼的。假如有點SQL基礎的人,一看這些方法,會覺得很親切。

在ORM、EF之前,我們操作資料庫,主要是在DAL裡寫SQL,然後調用各種SqlHelper。現在好了,資料庫與開發代碼分離,上帝的歸上帝,凱撒的還給凱撒,代碼裡面隻操作各種對象了,直接的select * from 叉叉 where 叉叉 order by 叉叉沒有了,代之以:

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

呵呵,不過還别說,linq用來就是爽。我開始習慣,并忍不住越來越喜歡了。

now,現在使用Entity Framwork,各種對象都直接使用linq,那麼分頁該怎麼處理呢?

答案是将Skip()和Take()兩個方法結合使用:

Skip((pageIndex - 1) * pageSize):忽略目前頁之前的記錄

Take(pageSize):讀取指定數量的記錄,也就是目前頁的記錄

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();      

繼續閱讀