国产探花免费观看_亚洲丰满少妇自慰呻吟_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:在博客園潛水很久了,第一次寫東西,很多東西不會表達,但是還是希望拿出些東西跟大家一起交流。各位大大輕拍!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 英吉沙县| 肇源县| 黔南| 耒阳市| 泾川县| 金湖县| 云和县| 合水县| 阜平县| 万全县| 黄大仙区| 固镇县| 凤庆县| 沙坪坝区| 宜川县| 淄博市| 常熟市| 丹棱县| 辽阳市| 丰宁| 上蔡县| 长白| 上虞市| 砚山县| 同心县| 桦甸市| 米林县| 太仓市| 太原市| 福海县| 榕江县| 宜兰市| 确山县| 顺平县| 渝中区| 郯城县| 兴宁市| 色达县| 汝城县| 明光市| 巍山|