国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

NHibernate使用ICriteria分頁并返回數據庫記錄總條數

2019-11-14 16:52:22
字體:
來源:轉載
供稿:網友

最近在使用NHibernate,發現進行分頁查詢無法得到數據庫記錄的總條數,在網上找了很久沒找到具體的實現方法,找到的資料都說得不是很清楚,研究了很久終于寫出了這樣一個方法。  

NHibernate下分頁要使用Icriteria約束查詢條件,但是返回的只有當前頁的記錄數,無法返回數據庫總記錄條數,這樣在使用的時候就算不出總頁數。自定義一個分頁響應對象PageResponse用于返回記錄總條數和分頁查詢結果集。

    /// <summary>    /// 分頁響應對象    /// </summary>    /// <typeparam name="T"></typeparam>    public class PageResponse<T>    {        public int TotalCount { get; set; }        public IList<T> ResultList { get; set; }    }

參考網上的方法,先創建一個ICriteria用于查詢數據庫記錄總條數,再clone一個用于分頁查詢,返回我自己定義的PageResponse對象,包含記錄總條數和分頁查詢結果集。獲得數據庫記錄總數之后要用UniqueResult()將SetPRojection()所附加的條件去掉,注意一定要clone一個Icriteria來分頁,否則只用一個Icriteria來完成兩次操作會報錯。

        /// <summary>        /// 分頁查詢        /// </summary>        /// <param name="pageSize">每頁顯示記錄條數</param>        /// <param name="pageNumber">頁碼</param>        /// <returns></returns>        public PageResponse<RequestMessage> GetRequestMessageList(int pageNumber, int pageSize)        {            using (Isession session = sessionFactory.OpenSession())            {                ICriteria criteria = session.CreateCriteria(typeof(RequestMessage));                ICriteria pageCriteria = CriteriaTransformer.Clone(criteria);                PageResponse<RequestMessage> requestMessage = new PageResponse<RequestMessage>();                requestMessage.TotalCount =Convert.ToInt32(criteria.SetProjection(Projections.RowCount()).UniqueResult());                requestMessage.ResultList = pageCriteria                                                .SetFirstResult(pageSize * (pageNumber < 1 ? 0 : pageNumber - 1))                                                .SetMaxResults(pageSize)                                                .List<RequestMessage>();                session.Flush();                return requestMessage;            }        }

 

使用這種分頁有兩個問題
1.使用兩個Icriteria來查詢兩次,不知道性能怎么樣(待測試)
2.返回的結果集包含數據庫的所有字段,不能直接在前端使用,需要把數據庫查出來的結果集轉換(DTO)為一個ViewModel集合給前端使用(待實現)
 
不知道大家還有沒有更好的實現方法?
 
ps:在博客園潛水很久了,第一次寫東西,很多東西不會表達,但是還是希望拿出些東西跟大家一起交流。各位大大輕拍!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀来县| 龙井市| 浦江县| 大港区| 蒙山县| 保靖县| 米脂县| 磐石市| 奎屯市| 扶余县| 禹城市| 临夏县| 福建省| 三门峡市| 古丈县| 泗阳县| 塔河县| 孟连| 天门市| 察哈| 乌兰察布市| 当阳市| 哈尔滨市| 临海市| 安阳县| 易门县| 晋中市| 逊克县| 邳州市| 庆云县| 呼伦贝尔市| 景泰县| 精河县| 阳西县| 贵德县| 永济市| 边坝县| 盈江县| 雅安市| 蒙山县| 柯坪县|