예제 #1
0
        private bool HandleThenByMethod(MethodCallExpression node)
        {
            OrderByDirection?direction = null;

            if (node.Method.Name == "ThenBy")
            {
                direction = OrderByDirection.Ascending;
            }
            else if (node.Method.Name == "ThenByDescending")
            {
                direction = OrderByDirection.Descending;
            }
            else
            {
                return(false);
            }

            if (node.Arguments.Count > 2)
            {
                throw new NotSupportedException("This overload of ThenBy is not supported.");
            }

            var field = ((node.Arguments[1] as UnaryExpression)?.Operand as LambdaExpression)?.Body as MemberExpression;

            if (field == null)
            {
                throw new NotSupportedException($"{node.Method.Name} must operate on a supported field.");
            }

            this.orderByExpressions.Push(new OrderByExpression(field.Member.Name, direction.Value));

            return(true);
        }
예제 #2
0
 public ScanRequestData(string dataSource, IList <string> intervals, IFilterSpec filter, IContextSpec context,
                        IEnumerable <string> columns, string resultFormat, int?limit, OrderByDirection?order, int?batchSize)
 {
     DataSource   = dataSource;
     Intervals    = intervals;
     Filter       = filter;
     Context      = context;
     Columns      = columns;
     Limit        = limit;
     Order        = order;
     ResultFormat = resultFormat;
     BatchSize    = batchSize;
 }
예제 #3
0
        public dynamic[] FindAllByColumnsByFunc <T>(string columns, Expression <Func <T, bool> > predicate = null, string orderBy = null,
                                                    OrderByDirection?orderDirection = null, int?pageNumber = null, int?pageSize = null,
                                                    string[] includeExpressions     = null) where T : class, IModel
        {
            IQueryable <T> query = _applicationDbContext.Set <T>().AsQueryable();

            if (predicate != null)
            {
                query = query.Where(predicate);
            }


            if (includeExpressions != null)
            {
                query = includeExpressions.Aggregate(query, (current, str) => current.Include(str));
            }

            var select = query.Select(string.Format("new ({0})", columns));

            if (!string.IsNullOrEmpty(orderBy))
            {
                try
                {
                    select = orderDirection == OrderByDirection.Descending
                  ? select.OrderBy(orderBy + " descending")
                   : select.OrderBy(orderBy);
                }
                catch (Exception ex)
                {
                    //
                }
            }


            if (pageNumber.HasValue && pageSize.HasValue)
            {
                select = select.Skip((pageNumber.Value - 1) * pageSize.Value).Take(pageSize.Value);
            }


            if (string.IsNullOrEmpty(columns) == false)
            {
                return(select.ToDynamicArray());
            }
            return(select.ToDynamicArray());
        }
예제 #4
0
        public IEnumerable <T> FindAllByFunc <T>(Expression <Func <T, bool> > predicate = null, string orderBy = null,
                                                 OrderByDirection?orderDirection        = null, int?top = null, Func <IQueryable <T>, IQueryable <T> > func = null) where T : class, IModel
        {
            IQueryable <T> query = _applicationDbContext.Set <T>();

            if (func != null)
            {
                query = func(query);
            }

            if (predicate != null)
            {
                query = query.Where(predicate);
            }

            if (top.HasValue)
            {
                query = query.Take(top.Value);
            }

            return(query);
        }
예제 #5
0
        public SimpleQuery ThenBy(ObjectReference reference, OrderByDirection?direction = null)
        {
            ThrowIfNoOrderByClause("ThenBy requires an existing OrderBy");

            return(new SimpleQuery(this, _clauses.Append(new OrderByClause(reference, direction))));
        }
예제 #6
0
 public SimpleQuery OrderBy(ObjectReference reference, OrderByDirection?direction = null)
 {
     return(new SimpleQuery(this, _clauses.Append(new OrderByClause(reference, direction))));
 }
예제 #7
0
        internal static string GetRequestUrl(string baseUri, string id = null, IEnumerable <ISearchFilter> filters = null, string orderByProperty = null, OrderByDirection?orderByDirection = null, int?skip = null, int?limit = null, int?includeLevels = null)
        {
            if (AreAllNull(id, filters, orderByProperty, skip, limit, includeLevels))
            {
                return(baseUri);
            }
            var mergedFilters = filters != null?filters.ToList() : new List <ISearchFilter>();

            if (orderByProperty != null)
            {
                mergedFilters.Add(new OrderBySearchFilter(orderByProperty,
                                                          orderByDirection ?? OrderByDirection.Ascending));
            }
            if (skip.HasValue)
            {
                mergedFilters.Add(new SkipSearchFilter(skip.Value));
            }
            if (limit.HasValue)
            {
                mergedFilters.Add(new LimitSearchFilter(limit.Value));
            }
            if (includeLevels.HasValue)
            {
                mergedFilters.Add(new EqualitySearchFilter("include", includeLevels.Value.ToString()));
            }
            var newBaseUrl = baseUri + id;

            if (!mergedFilters.Any())
            {
                return(newBaseUrl);
            }
            return(newBaseUrl + "?" + GetQueryStringFromSearchFilters(mergedFilters));
        }
예제 #8
0
        public async Task <SearchResult <T> > SearchAsync <T>(CancellationToken cancellationToken, IEnumerable <ISearchFilter> searchFilters = null, string orderByProperty = null, OrderByDirection?orderByDirection = null, int?skip = null, int?limit = null, int?includeLevels = null) where T : IContentfulItem, new()
        {
            var endpointUrl = RestEndpointResolver.GetEndpointUrl <T>(_space);
            var requestUrl  = GetRequestUrl(endpointUrl, null, searchFilters, orderByProperty, orderByDirection, skip, limit);
            var result      = await MakeGetRequestAsync(requestUrl, cancellationToken);

            return(await GetItemAsync <SearchResult <T> >(result));
        }
예제 #9
0
 public IScanQueryDescriptor Order(OrderByDirection?order)
 {
     OrderValue = order;
     return(this);
 }
예제 #10
0
 public OrderByClause(ObjectReference reference, OrderByDirection?direction = null)
 {
     _reference = reference;
     _direction = direction.HasValue ? direction.Value : OrderByDirection.Ascending;
 }
예제 #11
0
        public IEnumerable <T> FindAll <T>(Expression <Func <T, bool> > predicate = null, string orderBy = null, OrderByDirection?orderDirection = null,
                                           int?pageNumber = null, int?pageSize = null, params Expression <Func <T, object> >[] includeExpressions) where T : class, IModel
        {
            IQueryable <T> query = _applicationDbContext.Set <T>().AsNoTracking();

            if (predicate != null)
            {
                query = query.Where(predicate);
            }


            if (!string.IsNullOrEmpty(orderBy))
            {
                query = orderDirection == OrderByDirection.Descending
                    ? query.OrderBy(orderBy + " descending")
                    : query.OrderBy(orderBy);
            }

            if (pageNumber.HasValue && pageSize.HasValue)
            {
                query = query.Skip((pageNumber.Value - 1) * pageSize.Value).Take(pageSize.Value);
            }

            foreach (var include in includeExpressions)
            {
                query = query.Include(include).AsNoTracking();
            }

            return(query);
        }
예제 #12
0
        public IEnumerable <T> FindAll <T>(Expression <Func <T, bool> > predicate = null, Expression <Func <T, object> > orderBy = null, OrderByDirection?orderDirection = null,
                                           int?top = null, params Expression <Func <T, object> >[] includeExpressions) where T : class, IModel
        {
            IQueryable <T> query = _applicationDbContext.Set <T>();

            if (predicate != null)
            {
                query = query.Where(predicate);
            }
            if (orderBy != null)
            {
                if (orderDirection == OrderByDirection.Descending)
                {
                    query = query.OrderByDescending(orderBy);
                }
                else
                {
                    query = query.OrderBy(orderBy);
                }
            }
            if (top.HasValue)
            {
                query = query.Take(top.Value);
            }
            foreach (var include in includeExpressions)
            {
                query = query.Include(include);
            }

            return(query);
        }
예제 #13
0
        public List <T> FindAllByFunc <T>(Expression <Func <T, bool> > predicate = null, Expression <Func <T, object> > orderBy = null, OrderByDirection?orderDirection = null,
                                          int?pageNumber = null, int?pageSize = null, Func <IQueryable <T>, IQueryable <T> > func = null) where T : class, IModel
        {
            IQueryable <T> query = _applicationDbContext.Set <T>();

            if (func != null)
            {
                query = func(query);
            }

            if (predicate != null)
            {
                query = query.Where(predicate);
            }

            if (orderBy != null)
            {
                if (orderDirection == OrderByDirection.Descending)
                {
                    query = query.OrderByDescending(orderBy);
                }
                else
                {
                    query = query.OrderBy(orderBy);
                }
            }

            if (pageNumber.HasValue && pageSize.HasValue)
            {
                query = query.Skip((pageNumber.Value - 1) * pageSize.Value).Take(pageSize.Value);
            }

            return(query.ToList());
        }
예제 #14
0
        public async Task <IEnumerable <T> > FindAllAsync <T>(Expression <Func <T, bool> > predicate = null, Expression <Func <T, object> > orderBy = null, OrderByDirection?orderDirection = null, int?pageNumber = null, int?pageSize = null, params Expression <Func <T, object> >[] includeExpressions) where T : class, IModel
        {
            IQueryable <T> query = _applicationDbContext.Set <T>();

            if (predicate != null)
            {
                query = query.Where(predicate);
            }
            if (orderBy != null)
            {
                if (orderDirection == OrderByDirection.Descending)
                {
                    query = query.OrderByDescending(orderBy);
                }
                else
                {
                    query = query.OrderBy(orderBy);
                }
            }

            if (pageNumber.HasValue && pageSize.HasValue)
            {
                query = query.Skip((pageNumber.Value - 1) * pageSize.Value).Take(pageSize.Value);
            }

            foreach (var include in includeExpressions)
            {
                query = query.Include(include);
            }

            return(await query.ToListAsync());
        }