Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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));
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 9
0
        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)
            });
        }
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 11
0
        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));
            }
        }
Ejemplo n.º 12
0
        protected virtual IFutureValue <long> Count()
        {
            var dc = CriteriaTransformer.Clone(Query);

            dc.ClearOrders();
            return(dc.SetProjection(Projections.RowCountInt64()).FutureValue <T, long>());
        }
Ejemplo n.º 13
0
        /// <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()));
        }
Ejemplo n.º 14
0
        /// <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>());
        }
Ejemplo n.º 15
0
        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();
            }
        }
Ejemplo n.º 16
0
        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>());
        }
Ejemplo n.º 17
0
        /// <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);
        }
Ejemplo n.º 18
0
        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>());
        }
Ejemplo n.º 19
0
        /// <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>());
        }
Ejemplo n.º 20
0
        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);
            }
        }
Ejemplo n.º 21
0
        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;
            }
        }
Ejemplo n.º 22
0
        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);
            }
        }
Ejemplo n.º 23
0
 ///<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();
     }
 }
Ejemplo n.º 24
0
 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);
 }
Ejemplo n.º 25
0
        public static int Count(ICriteria iCriteria)
        {
            var cloneCriteria = CriteriaTransformer.Clone(iCriteria);

            cloneCriteria.SetProjection(Projections.RowCount());
            var total = cloneCriteria.UniqueResult <int>();

            return(total);
        }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
        /// <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);
        }
Ejemplo n.º 28
0
        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);
        }
Ejemplo n.º 29
0
        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);
        }
Ejemplo n.º 30
0
        /// <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());
        }