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)); }
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); }
public QueryValueResult <int> Count(QueryEngineArguments <T> args) { var count = GetQuery(args).ToFutureValue(x => x.Count()); return(new QueryValueResult <int>(() => count.Value)); }
public QueryValueResult <T> FirstOrDefault(QueryEngineArguments <T> args) { var value = GetQuery(args).Take(1).ToFuture(); return(new QueryValueResult <T>(value.FirstOrDefault)); }
public QueryResult <T> All(QueryEngineArguments <T> args) { var query = GetQuery(args).ToFuture(); return(new QueryResult <T>(query)); }