Ejemplo n.º 1
0
        // new, ok
        private Microsoft.OData.UriParser.ODataQueryOptionParser CreateParser(
            Type rootType, Type entityType,
            string filter = null, string orderby = null, string selectExpand = null)
        {
            var edmType = _model.FindDeclaredType(rootType.FullName);

            var clauses = new Dictionary <string, string>()
            {
                { "$filter", filter },
                { "$orderby", orderby },
                { "$select", null },
                { "$expand", selectExpand },
            };

            var parser = new Microsoft.OData.UriParser.ODataQueryOptionParser(_model, edmType, null, clauses, _serviceProvider)
            {
                Resolver = new Microsoft.OData.UriParser.StringAsEnumResolver()
                {
                    EnableCaseInsensitive = true,
                },
                Settings = { MaximumExpansionDepth = 1, },
            };

            return(parser);
        }
Ejemplo n.º 2
0
        // new ok
        private Expression ApplyOptions(IQueryable queryable, ODataQueryContext queryContext,
                                        Microsoft.OData.UriParser.ODataQueryOptionParser queryOptionParser,
                                        string filter, string orderby, string selectExpand)
        {
            var filterQueryOption       = filter == null ? null : new FilterQueryOption(filter, queryContext, queryOptionParser);
            var orderQueryOption        = orderby == null ? null : new OrderByQueryOption(orderby, queryContext, queryOptionParser);
            var selectExpandQueryOption = selectExpand == null ? null : new SelectExpandQueryOption(null, selectExpand, queryContext, queryOptionParser);

            var querySettings = new ODataQuerySettings()
            {
                HandleNullPropagation = this.HandleNullPropagation ?
                                        HandleNullPropagationOption.True :
                                        HandleNullPropagationOption.False,
            };

            var validationSettings = new ODataValidationSettings()
            {
                MaxNodeCount = 100
            };

            try
            {
                filterQueryOption?.Validate(validationSettings);
                orderQueryOption?.Validate(validationSettings);
                selectExpandQueryOption?.Validate(validationSettings);
            }
            catch (Exception)
            {
                throw;
            }

            IQueryable result = queryable;

            if (filterQueryOption != null)
            {
                result = filterQueryOption?.ApplyTo(result, querySettings);
            }
            if (orderQueryOption != null)
            {
                result = orderQueryOption?.ApplyTo(result, querySettings);
            }
            if (selectExpandQueryOption != null)
            {
                result = selectExpandQueryOption?.ApplyTo(result, querySettings);
            }
            var expression = result.Expression;

            if (EvaluateLocals)
            {
                expression = CapturedEvaluator.CapturedEvaluator.Eval(expression);
            }

            return(expression);
        }