最近做一個小功能,需要數據分頁,因為小框架使用的是EF,因此查詢了一下EF的分頁。
EF分頁主要用到了skip和take兩個方法:
GetListBy(lamda xxxxx).skip(PageSize *PageIndex).take(PageSize)
PageSize是每頁的大小、PageIndex是當前的頁數
1)添加內容,調整界面
- 界面上增加按鈕:增加上一頁、下一頁等按鈕,供用戶使用
- 增加變量保存:增加當前頁、數據總量等數據
2)增加ADO.NET查詢
本想直接使用EF的count來獲取數量,結果是慢的慘不忍睹,然后用ADO.NET直接查數量,這樣不會造成延遲。
3)用EF查詢數據
當查詢出數量,接着用EF將第一頁數據獲取上來(注意,步驟2和3查詢條件需要一致,否則出錯)
4)上一頁和下一頁
另起一個方法,直接用EF的條件來獲取下一頁或上一頁,然后根據下面進行按鈕控制。
代碼就不貼了,參考資料附一下:
https://www.cnblogs.com/M-LittleBird/p/5852395.html
https://blog.csdn.net/augus3344/article/details/45378877
- 根據頁數據量和總量的對比,判斷當前頁是否最后一頁
- 根據頁碼來判斷當前頁有無上一頁
經簡單測試,幾十萬條數據完成沒問題。
5)導出的問題
分頁的數據比較零碎,不能作為導出的數據來源,導出使用相同條件的ADO.NET進行重新查詢,然后導出(注意,此處是查數據,步驟2僅僅查詢數量)