Example #1
0
        public QueryPagedResult <T> Paging(QueryEngineArguments <T> args, int pageNumber, int pageSize)
        {
            var query  = GetQuery(args);
            var count  = query.ToFutureValue(x => x.Count());
            var result = query.Skip((pageNumber - 1) * pageSize)
                         .Take(pageSize)
                         .ToFuture();

            return(new QueryPagedResult <T>(result, () => count.Value));
        }
Example #2
0
        private IQueryable <T> GetQuery(QueryEngineArguments <T> args)
        {
            var query = _sessionFactory.GetCurrentSession().Query <T>();

            //Enable caching for queries.
            query = query.Cacheable();

            query = args.Where.Aggregate(query, (current, @where) => current.Where(where));

            var firstOrder = args.OrderBy.FirstOrDefault();

            if (firstOrder != null)
            {
                args.OrderBy.Remove(firstOrder);
                query = query.OrderBy(firstOrder.PropertyInfo, firstOrder.Descending);
                query = args.OrderBy.Aggregate(query, (current, order) => current.ThenOrderBy(order.PropertyInfo, order.Descending));
            }
            return(query);
        }
Example #3
0
        public QueryValueResult <int> Count(QueryEngineArguments <T> args)
        {
            var count = GetQuery(args).ToFutureValue(x => x.Count());

            return(new QueryValueResult <int>(() => count.Value));
        }
Example #4
0
        public QueryValueResult <T> FirstOrDefault(QueryEngineArguments <T> args)
        {
            var value = GetQuery(args).Take(1).ToFuture();

            return(new QueryValueResult <T>(value.FirstOrDefault));
        }
Example #5
0
        public QueryResult <T> All(QueryEngineArguments <T> args)
        {
            var query = GetQuery(args).ToFuture();

            return(new QueryResult <T>(query));
        }