一個基於Dapper的自定義分頁實現,支持篩選,排序,結果集總數,非存儲過程實現。 ...
簡介
之前事先搜索了下博客園上關於Dapper分頁的實現,有是有,但要麼是基於存儲過程,要麼支持分頁,而不支持排序,或者搜索條件不是那麼容易維護。
代碼
首先先上代碼: https://github.com/jinweijie/Dapper.PagingSample
方法定義
以下是我的一個分頁的實現,雖然不是泛型(因為考慮到where條件以及sql語句的搭配),但是應該可以算是比較通用的了,方法定義如下:
public Tuple<IEnumerable<Log>, int> Find(LogSearchCriteria criteria , int pageIndex , int pageSize , string[] asc , string[] desc);
以上函數定義是一個查詢Log的示例,返回結果中,Tuple的第一個值是結果集,第二個值是總行數(例如,總共有100條記錄,每頁10條,當前第一頁,那麼第一個值是10條記錄,第二個值是100)
在示例項目中,我用兩種方法實現了分頁:
1. 第一種是基於2此查詢,第一次得到總數,第二次查詢得到結果集。
2. 第二種是基於1此查詢,用了SqlServer 的Offest/Fetch,所以只支持Sql Server 2012+,所以大家根據自己用的Sql Server版本選擇不同的實現,這裡當然是第二種實現效率更高一點。
運行示例
1. 將Github的Repo下載或者Clone到本地以後,到Database目錄下,解壓縮Database.7z
2. Attach到Sql Server上。預設我使用Sql Server LocalDB,連接字元串是 Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DapperPagingSample;integrated security=True; 如果你用的不是LocalDB,請酌情修改App.Config的連接字元串。
3. Ctrl+F5運行程式,示例項目里,我用了一個簡單的WinForm程式,但應該可以比較好的演示分頁效果。
謝謝
希望對大家有幫助:)