/// <summary> /// 分页获取数据字典 /// </summary> /// <param name="page"></param> /// <param name="rowCount"></param> /// <param name="roleName"></param> /// <param name="createDate"></param> /// <param name="totalCount"></param> /// <returns></returns> public IList <D_Dictionary_Model> GetAllByPage(int startCount, int rowCount, DicTypeEnum?dicType, string dicName, string createDate, out int totalCount) { ICriteria ic = NhSession.CreateCriteria(typeof(D_Dictionary_Model)); if (!string.IsNullOrEmpty(dicName)) { ic.Add(Restrictions.Like("DicName", dicName, MatchMode.Anywhere)); } if (!string.IsNullOrEmpty(createDate)) { ic.Add(Restrictions.Le("CreateDateTime", createDate)); } if (dicType.HasValue) { ic.Add(Restrictions.Eq("DicType", dicType)); } ic.Add(Restrictions.Eq("DataStatus", false)); ICriteria pageCrit = CriteriaTransformer.Clone(ic); totalCount = Convert.ToInt32(pageCrit.SetProjection(Projections.RowCount()).UniqueResult()); ic.AddOrder(new Order("Ord", false)); IList <D_Dictionary_Model> list = ic.SetFirstResult(startCount).SetMaxResults(rowCount).List <D_Dictionary_Model>(); return(list); }
public void MultiCriteriaQueriesWithIntsShouldExecuteCorrectly() { var driver = Sfi.ConnectionProvider.Driver; if (!driver.SupportsMultipleQueries) { Assert.Ignore("Driver {0} does not support multi-queries", driver.GetType().FullName); } // Test querying IntData using (ISession session = this.OpenSession()) { ICriteria criteriaWithPagination = session.CreateCriteria <DomainClass>(); criteriaWithPagination.Add(Expression.Le("IntData", 2)); ICriteria criteriaWithRowCount = CriteriaTransformer.Clone(criteriaWithPagination); criteriaWithPagination.SetFirstResult(0).SetMaxResults(1); criteriaWithRowCount.SetProjection(Projections.RowCountInt64()); IMultiCriteria multiCriteria = session.CreateMultiCriteria(); multiCriteria.Add(criteriaWithPagination); multiCriteria.Add(criteriaWithRowCount); IList results = multiCriteria.List(); long numResults = (long)((IList)results[1])[0]; IList list = (IList)results[0]; Assert.AreEqual(2, criteriaWithRowCount.UniqueResult <long>()); Assert.AreEqual(1, list.Count); } }
public void CanUseCriteriaWithParameterList() { using (var s = OpenSession()) { var item = new Item { Id = 1 }; s.Save(item); s.Flush(); } using (var s = OpenSession()) { var criteria = s.CreateCriteria(typeof(Item)) .Add( Restrictions.In( "id", new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 })); var queries = s.CreateQueryBatch() .Add <Item>(CriteriaTransformer.Clone(criteria)) .Add <int>( CriteriaTransformer.Clone(criteria) .SetProjection(Projections.RowCount())); var items = queries.GetResult <Item>(0); var fromDb = items.First(); Assert.That(fromDb.Id, Is.EqualTo(1)); var count = queries.GetResult <int>(1).Single(); Assert.That(count, Is.EqualTo(1)); } }
public IList <T> Query <T>(ICriterion expression, Order[] order, int pageIndex, int pageSize, out int recordCount) where T : class { IList <T> list = new List <T>(); recordCount = 0; ICriteria query = session.CreateCriteria <T>(); if (expression != null) { query.Add(expression); } ICriteria queryPage = CriteriaTransformer.Clone(query); //获取记录总数 recordCount = Convert.ToInt32(query.SetProjection(Projections.RowCount()).UniqueResult()); //设置排序 if (order != null) { foreach (Order o in order) { queryPage.AddOrder(o); } } queryPage.SetFirstResult((pageIndex - 1) * pageSize); queryPage.SetMaxResults(pageSize); list = queryPage.List <T>(); return(list); }
/// <summary> /// /// </summary> /// <returns></returns> public List <User> Find(out int totalRecords, UserCriteria userCriteria = null, int currentRecordIndex = 0, int maxRecord = 0) { totalRecords = 0; List <User> resultList = null; IQueryable <ApplicationUser> rowList = _dbContext.Users; CriteriaTransformer.CompleteQuery(ref rowList, userCriteria); if (userCriteria == null || userCriteria.FieldSortList == null || userCriteria.FieldSortList.Count == 0) { rowList = rowList.OrderBy(u => u.UserName); } if (maxRecord > 0) { totalRecords = rowList.Count(); rowList = rowList.Skip(currentRecordIndex).Take(maxRecord); } if (rowList != null) { foreach (var applicationUserRow in rowList) { if (resultList == null) { resultList = new List <User>(); } resultList.Add(UserTransformer.ToBean(applicationUserRow)); } } return(resultList); }
public async Task TwoMultiQueriesWithDifferentPagingGetDifferentResultsWhenUsingCachedQueriesAsync() { await(CreateItemsAsync()); using (var s = OpenSession()) { var criteria = s.CreateCriteria(typeof(Item)) .Add(Restrictions.Gt("id", 50)); var multiCriteria = s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria).SetFirstResult(10)) .Add(CriteriaTransformer.Clone(criteria).SetProjection(Projections.RowCount())); multiCriteria.SetCacheable(true); var results = await(multiCriteria.ListAsync()); var items = (IList)results[0]; Assert.AreEqual(89, items.Count); var count = (int)((IList)results[1])[0]; Assert.AreEqual(99L, count); } using (var s = OpenSession()) { var criteria = s.CreateCriteria(typeof(Item)) .Add(Restrictions.Gt("id", 50)); var multiCriteria = s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria).SetFirstResult(20)) .Add(CriteriaTransformer.Clone(criteria).SetProjection(Projections.RowCount())); multiCriteria.SetCacheable(true); var results = await(multiCriteria.ListAsync()); var items = (IList)results[0]; Assert.AreEqual(79, items.Count, "Should have gotten different result here, because the paging is different"); var count = (int)((IList)results[1])[0]; Assert.AreEqual(99L, count); } }
public void CanUseWithParameterizedQueriesAndLimit() { using (ISession s = OpenSession()) { for (int i = 0; i < 150; i++) { Item item = new Item(); item.Id = i; s.Save(item); } s.Flush(); } using (ISession s = OpenSession()) { ICriteria criteria = s.CreateCriteria(typeof(Item)) .Add(Expression.Gt("id", 50)); IList results = s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria) .SetFirstResult(10)) .Add(CriteriaTransformer.Clone(criteria) .SetProjection(Projections.RowCount())) .List(); IList items = (IList)results[0]; Assert.AreEqual(89, items.Count); int count = (int)((IList)results[1])[0]; Assert.AreEqual(99L, count); } RemoveAllItems(); }
/// <summary> /// Based on the ICriteria will return a paged result set, will create two copies /// of the query 1 will be used to select the total count of items, the other /// used to select the page of data. /// /// The results will be wraped in a PagedResult object which will contain /// the items and total item count. /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="criteria"></param> /// <param name="startIndex"></param> /// <param name="pageSize"></param> /// <returns></returns> public static PagedResult <TEntity> ToPagedResult <TEntity>(this ICriteria criteria, int startIndex, int pageSize) { // Clone a copy of the criteria, setting a projection // to get the row count, this will get the total number of // items in the query using a select count(*) ICriteria countCriteria = CriteriaTransformer.Clone(criteria) .SetProjection(Projections.RowCountInt64()); // Clear the ordering of the results countCriteria.Orders.Clear(); // Clone a copy fo the criteria to get the page of data, // setting max and first result, this will get the page of data.s ICriteria pageCriteria = CriteriaTransformer.Clone(criteria) .SetMaxResults(pageSize) .SetFirstResult(startIndex); // Create a new pagedresult object and populate it, use the paged query // to get the items, and the count query to get the total item count. var pagedResult = new PagedResult <TEntity>(pageCriteria.List <TEntity>(), (long)countCriteria.UniqueResult()); // Return the result. return(pagedResult); }
public PagingData <M> Query( WebQueryFilter filter, PagingCondition condition, Action <ICriteria> builder, Func <R, M> convert) { var session = this.OS.TransactionManager.GetSession(); var criteria = session.CreateCriteria(typeof(R)); condition = condition ?? new PagingCondition(0, int.MaxValue); if (builder != null) { builder(criteria); } if (filter != null) { criteria.WithQueryFilter(filter).WithQueryOrder(filter); } criteria.ClearOrders(); var pageCriteria = CriteriaTransformer.Clone(criteria); var page = (condition.Skip / condition.Take) - 1; return(new PagingData <M>() { TotalCount = Convert.ToInt32(criteria.SetProjection(Projections.RowCount()).UniqueResult()), Items = pageCriteria.SetFirstResult(condition.Skip) .SetMaxResults(condition.Take) .List <R>() .Select(o => convert(o)) .ToList(), Paging = new Paging(page, condition.Take) }); }
public void TwoMultiQueriesWithDifferentPagingGetDifferentResultsWhenUsingCachedQueries() { CreateItems(); using (ISession s = OpenSession()) { ICriteria criteria = s.CreateCriteria(typeof(Item)) .Add(Expression.Gt("id", 50)); IMultiCriteria multiCriteria = s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria).SetFirstResult(10)) .Add(CriteriaTransformer.Clone(criteria).SetProjection(Projections.RowCount())); multiCriteria.SetCacheable(true); IList results = multiCriteria.List(); IList items = (IList)results[0]; Assert.AreEqual(89, items.Count); int count = (int)((IList)results[1])[0]; Assert.AreEqual(99L, count); } using (ISession s = OpenSession()) { ICriteria criteria = s.CreateCriteria(typeof(Item)) .Add(Expression.Gt("id", 50)); IMultiCriteria multiCriteria = s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria).SetFirstResult(20)) .Add(CriteriaTransformer.Clone(criteria).SetProjection(Projections.RowCount())); multiCriteria.SetCacheable(true); IList results = multiCriteria.List(); IList items = (IList)results[0]; Assert.AreEqual(79, items.Count, "Should have gotten different result here, because the paging is different"); int count = (int)((IList)results[1])[0]; Assert.AreEqual(99L, count); } RemoveAllItems(); }
public async Task CanUseCriteriaWithParameterListAsync() { using (var s = OpenSession()) { var item = new Item { Id = 1 }; await(s.SaveAsync(item)); await(s.FlushAsync()); } using (var s = OpenSession()) { var criteria = s.CreateCriteria(typeof(Item)) .Add( Restrictions.In( "id", new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 })); var queries = s.CreateQueryBatch() .Add <Item>(CriteriaTransformer.Clone(criteria)) .Add <int>( CriteriaTransformer.Clone(criteria) .SetProjection(Projections.RowCount())); var items = await(queries.GetResultAsync <Item>(0, CancellationToken.None)); var fromDb = items.First(); Assert.That(fromDb.Id, Is.EqualTo(1)); var count = (await(queries.GetResultAsync <int>(1, CancellationToken.None))).Single(); Assert.That(count, Is.EqualTo(1)); } }
protected virtual IFutureValue <long> Count() { var dc = CriteriaTransformer.Clone(Query); dc.ClearOrders(); return(dc.SetProjection(Projections.RowCountInt64()).FutureValue <T, long>()); }
/// <summary> Create a query (ICriteria) </summary> public ICriteria CreateCountQuery(ICriteria criteria) { ICriteria criteriaClone = CriteriaTransformer.Clone(criteria); criteriaClone.ClearOrders(); return(criteriaClone.SetFirstResult(0).SetProjection(Projections.RowCount())); }
/// <summary> /// 返回查找实体列表(分页) /// </summary> /// <param name="condition">实体条件</param> /// <param name="page"></param> /// <param name="pageSize"></param> /// <param name="orderBy"></param> /// <param name="orderDir"></param> /// <param name="total"></param> /// <returns></returns> public IList <TEntity> Find(TEntity condition, int page, int pageSize, string orderBy, string orderDir, out int total) { int start = page <= 1 ? 0 : (page - 1) * pageSize; //IQuery query = _session.CreateQuery(sbHql.ToString()); ICriteria query = _session.CreateCriteria(typeof(TEntity)); if (condition != null) { NHibernate.Criterion.Example example = Example.Create(condition); example.EnableLike(MatchMode.Anywhere); query.Add(example); } total = CriteriaTransformer.Clone(query).SetProjection(Projections.RowCount()).UniqueResult <int>(); if (!string.IsNullOrEmpty(orderBy)) { query.AddOrder(new Order(orderBy, orderDir.ToLower() == "asc")); } if (start > 0) { query.SetFirstResult(start); } if (pageSize > 0) { query.SetMaxResults(pageSize); } query.SetCacheable(true); return(query.List <TEntity>()); }
public void CanUseSetParameterList() { using (ISession s = OpenSession()) { Item item = new Item(); item.Id = 1; s.Save(item); s.Flush(); } using (ISession s = OpenSession()) { ICriteria criteria = s.CreateCriteria(typeof(Item)) .Add(Expression.In("id", new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 })); IList results = s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria)) .Add(CriteriaTransformer.Clone(criteria) .SetProjection(Projections.RowCount())) .List(); IList items = (IList)results[0]; Item fromDb = (Item)items[0]; Assert.AreEqual(1, fromDb.Id); IList counts = (IList)results[1]; int count = (int)counts[0]; Assert.AreEqual(1L, count); } using (ISession s = OpenSession()) { s.Delete("from Item"); s.Flush(); } }
public IList <T> QueryPaging <T>(NHibernate.Criterion.ICriterion expression, NHibernate.Criterion.Order[] orders, int pageIndex, int pageSize, out int recordCount) where T : class { recordCount = 0; ICriteria criteria = session.CreateCriteria <T>(); if (expression != null) { criteria.Add(expression); } ICriteria pageCriteria = CriteriaTransformer.Clone(criteria); recordCount = criteria.SetProjection(Projections.RowCount()).UniqueResult <int>(); if (orders != null) { foreach (var order in orders) { pageCriteria.AddOrder(order); } } pageCriteria.SetFirstResult((pageIndex - 1) * pageSize); pageCriteria.SetMaxResults(pageSize); return(pageCriteria.List <T>()); }
/// <summary>分页查找全部 /// </summary> /// <param name="detachCriteria">游离查询条件</param> /// <param name="pageIndex">无需分页则设置空</param> /// <param name="pageSize">无需分页则设置空</param> /// <param name="total"></param> /// <returns></returns> protected IEnumerable <TEntity> FindAll(DetachedCriteria detachCriteria, int?pageIndex, int?pageSize, out long total) { total = 0; if (detachCriteria == null) { return(new List <TEntity>()); } var session = this.GetSession(); var query = CriteriaTransformer.Clone(detachCriteria.GetExecutableCriteria(session)); var counter = CriteriaTransformer.Clone(detachCriteria.GetExecutableCriteria(session)); //由于order的存在会导致聚合查询语法错误,因此需要清理此处的order,对于count(*)而言没有意义的orderby counter.ClearOrders(); if (pageIndex.HasValue && pageSize.HasValue) { query.SetFirstResult((pageIndex.Value - 1) * pageSize.Value).SetMaxResults(pageSize.Value); } var result = query.List <TEntity>(); //总数 total = pageIndex.HasValue && pageSize.HasValue ? Convert.ToInt64(counter.SetProjection(Projections.RowCount()).UniqueResult()) : result.Count; return(result); }
public virtual IList <T> GetList(int pageSize, int pageIndex, List <QueryField> queryList, SortField sort, out int recordCount) { int startIndex = pageSize * (pageIndex - 1); ICriteria crit = Session.CreateCriteria <T>(); if (queryList != null) { foreach (var query in queryList) { crit.Add(GetExpression(query)); } } // Copy current ICriteria instance to the new one for getting the pagination records. ICriteria pageCrit = CriteriaTransformer.Clone(crit); // Get the total record count recordCount = Convert.ToInt32(pageCrit.SetProjection(Projections.RowCount()).UniqueResult()); if (sort != null) { crit.AddOrder(GetOrder(sort)); } return(crit.SetFirstResult(startIndex) .SetMaxResults(pageSize) .List <T>()); }
/// <summary>分页查找全部 /// </summary> /// <param name="pageIndex">页码 索引从1开始</param> /// <param name="pageSize"></param> /// <param name="orders"></param> /// <param name="criterions"></param> /// <param name="totalCount">返回记录总数</param> /// <returns></returns> protected IEnumerable <TEntity> FindAll(int?pageIndex, int?pageSize, Order[] orders, ICriterion[] criterions, out long totalCount) { //计算总数query ICriteria counterQuery = this.GetSession().CreateCriteria <TEntity>(); if (criterions != null) { criterions.ToList().ForEach(o => counterQuery.Add(o)); } //分页query ICriteria query = CriteriaTransformer.Clone(counterQuery); //totalCount totalCount = Convert.ToInt64(counterQuery.SetProjection(Projections.RowCount()).UniqueResult()); if (orders != null) { orders.ToList().ForEach(o => query.AddOrder(o)); } if (pageIndex.HasValue && pageSize.HasValue) { query.SetFirstResult((pageIndex.Value - 1) * pageSize.Value).SetMaxResults(pageSize.Value); } return(query.List <TEntity>()); }
public async Task CanGetMultiQueryFromSecondLevelCacheAsync() { await(CreateItemsAsync()); //set the query in the cache await(DoMutiQueryAndAssertAsync()); var cacheHashtable = MultipleQueriesFixtureAsync.GetHashTableUsedAsQueryCache(Sfi); var cachedListEntry = (IList) new ArrayList(cacheHashtable.Values)[0]; var cachedQuery = (IList)cachedListEntry[1]; var firstQueryResults = (IList)cachedQuery[0]; firstQueryResults.Clear(); firstQueryResults.Add(3); firstQueryResults.Add(4); var secondQueryResults = (IList)cachedQuery[1]; secondQueryResults[0] = 2; using (var s = Sfi.OpenSession()) { var criteria = s.CreateCriteria(typeof(Item)) .Add(Restrictions.Gt("id", 50)); var multiCriteria = s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria).SetFirstResult(10)) .Add(CriteriaTransformer.Clone(criteria).SetProjection(Projections.RowCount())); multiCriteria.SetCacheable(true); var results = await(multiCriteria.ListAsync()); var items = (IList)results[0]; Assert.AreEqual(2, items.Count); var count = (int)((IList)results[1])[0]; Assert.AreEqual(2L, count); } }
public IList <TransactionType> Search(string name, string code, int start, int limit, out int total) { List <TransactionType> result = new List <TransactionType>(); try { ICriteria criteria = _Session.CreateCriteria(typeof(TransactionType)); if (!string.IsNullOrEmpty(name)) { criteria.Add(Expression.Like("Name", name)); } if (!string.IsNullOrEmpty(code)) { criteria.Add(Expression.Like("Code", code)); } ICriteria countCriteria = CriteriaTransformer.Clone(criteria).SetProjection(Projections.RowCountInt64()); ICriteria listCriteria = CriteriaTransformer.Clone(criteria).SetFirstResult(start).SetMaxResults(limit); listCriteria.AddOrder(Order.Desc("Id")); IList allResults = _Session.CreateMultiCriteria().Add(listCriteria).Add(countCriteria).List(); foreach (var o in (IList)allResults[0]) { result.Add((TransactionType)o); } total = Convert.ToInt32((long)((IList)allResults[1])[0]); return(result); } catch (Exception) { throw; } }
public async Task CanUseSetParameterListAsync() { using (var s = OpenSession()) { var item = new Item(); item.Id = 1; await(s.SaveAsync(item)); await(s.FlushAsync()); } using (var s = OpenSession()) { var criteria = s.CreateCriteria(typeof(Item)) .Add(Restrictions.In("id", new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 })); var results = await(s.CreateMultiCriteria() .Add(CriteriaTransformer.Clone(criteria)) .Add(CriteriaTransformer.Clone(criteria) .SetProjection(Projections.RowCount())) .ListAsync()); var items = (IList)results[0]; var fromDb = (Item)items[0]; Assert.AreEqual(1, fromDb.Id); var counts = (IList)results[1]; var count = (int)counts[0]; Assert.AreEqual(1L, count); } }
///<summary> /// 获取分页记录,并返回某个字段的SUM值 ///</summary> public IList <T> FindByPage <T>(int currentPage, int pageSize, out int recordCount, out decimal totalAmount, string sumKeyName, ICriteria criteria) { try { OpenConnect(); //利用投影得到总记录数 var criteriaCount = CriteriaTransformer.Clone(criteria); //清除Order criteriaCount.Orders.Clear(); recordCount = criteriaCount.SetProjection(Projections.RowCount()).UniqueResult <int>(); if (!string.IsNullOrEmpty(sumKeyName)) { var criteriaSum = CriteriaTransformer.Clone(criteria); criteriaSum.Orders.Clear(); totalAmount = criteriaSum.SetProjection(Projections.Sum(sumKeyName)).UniqueResult <decimal>(); } else { totalAmount = 0; } return(criteria.SetFirstResult((currentPage - 1) * pageSize) .SetMaxResults(pageSize) .List <T>()); } catch (Exception ex) { LogExepttion(ex); throw; } finally { Disconnect(); } }
public CriteriaBatch OnRead <T>(Proc <ICollection <T>, int> read) { collectionAndCountDelegate[currentIndex] = delegate(IList list, int count) { read(Collection.ToArray <T>(list), count); }; Add(CriteriaTransformer.TransformToRowCount(currentCriteria)); return(this); }
public static int Count(ICriteria iCriteria) { var cloneCriteria = CriteriaTransformer.Clone(iCriteria); cloneCriteria.SetProjection(Projections.RowCount()); var total = cloneCriteria.UniqueResult <int>(); return(total); }
private static DetachedCriteria TransformToRowCount(DetachedCriteria criteria) { DetachedCriteria cloned = CriteriaTransformer.Clone(criteria); cloned.ClearOrders(); cloned.SetResultTransformer(null).SetFirstResult(0).SetMaxResults(RowSelection.NoValue).SetProjection( Projections.RowCountInt64()); return(cloned); }
/// <summary> /// 복수의 Entity 정보를 읽을 때 지정된 readAction을 수행하도록 설정한다. /// </summary> /// <typeparam name="T">Entity 수형</typeparam> /// <param name="readAction">Entity Loading시 실행할 Action</param> /// <returns>Current instance of CriteriaBatch</returns> public CriteriaBatch OnRead <T>(Action <ICollection <T>, int> readAction) { readAction.ShouldNotBeNull("readAction"); _collectionAndCountDelegate[_currentIndex] = ((list, count) => readAction(list.Cast <T>().ToList(), count)); // 결과 Set의 RowCount를 세는 Criteria를 추가한다. // for NHibernate 2.0 Add(CriteriaTransformer.TransformToRowCount(_currentCriteria)); // for NHibernate 1.2 // Add(_currentCriteria.SetProjection(Projections.RowCount())); return(this); }
public IList <D_WorkFlowLog_Model> GetAllByPage(int startCount, int rowCount, D_Report_Model reportModel, out int totalCount) { ICriteria ic = NhSession.CreateCriteria(typeof(D_WorkFlowLog_Model)); ic.Add(Restrictions.Eq("ReportGuid", reportModel)); ICriteria pageCrit = CriteriaTransformer.Clone(ic); totalCount = Convert.ToInt32(pageCrit.SetProjection(Projections.RowCount()).UniqueResult()); IList <D_WorkFlowLog_Model> list = ic.SetFirstResult(startCount).SetMaxResults(rowCount).List <D_WorkFlowLog_Model>(); return(list); }
public PagedResult <TE> ToPagedResult <TE>(ICriteria criteria, SelectCondition condition) where TE : IEntityBase { ICriteria countCriteria = CriteriaTransformer.Clone(criteria).SetProjection(Projections.RowCountInt64()); countCriteria.ClearOrders(); var itemscount = (long)countCriteria.UniqueResult(); var items = criteria.SetMaxResults(condition.PageSize) .SetFirstResult((condition.PageIndex - 1) * condition.PageSize) .List <TE>(); var result = new PagedResult <TE>(items, itemscount); return(result); }
/// <summary> /// 動態查詢筆數 /// </summary> /// <returns>總筆數</returns> public int CountByDetachedCriteria(DetachedCriteria detachedcriteria) { ISession session = HibernateTemplate.SessionFactory.GetCurrentSession(); //ISession session = NHibernateHelper.GetCurrentSession(); DetachedCriteria tmpCriteria = CriteriaTransformer.Clone(detachedcriteria); tmpCriteria.ClearOrders(); ICriteria criteria = tmpCriteria.GetExecutableCriteria(session); ProjectionList projection = Projections.ProjectionList(); projection.Add(Projections.RowCount()); return((int)criteria.SetProjection(projection).UniqueResult()); }