Esempio n. 1
0
        public async Task InvokeAsync(IMiddlewareContext context)
        {
            await _next(context).ConfigureAwait(false);

            IValueNode filter = context.Argument <IValueNode>(_contextData.ArgumentName);

            if (filter is null || filter is NullValueNode)
            {
                return;
            }

            IQueryable <T> source = null;

            if (context.Result is PageableData <T> p)
            {
                source = p.Source;
            }
            else
            {
                p = null;
            }

            if (context.Result is IQueryable <T> q)
            {
                source = q;
            }
            else if (context.Result is IEnumerable <T> e)
            {
                source = e.AsQueryable();
            }

            if (source != null &&
                context.Field.Arguments[_contextData.ArgumentName].Type is InputObjectType iot &&
                iot is IFilterInputType fit)
            {
                if (source is EnumerableQuery)
                {
                    var visitor = new QueryableFilterVisitor(iot, fit.EntityType, _converter, true);
                    filter.Accept(visitor);
                    source = source.Where(visitor.CreateFilter <T>());
                }
                else
                {
                    var visitor = new QueryableFilterVisitor(iot, fit.EntityType, _converter, false);
                    filter.Accept(visitor);
                    source = source.Where(visitor.CreateFilter <T>());
                }

                context.Result = p is null
                    ? (object)source
                    : new PageableData <T>(source, p.Properties);
            }
        }
Esempio n. 2
0
        public async Task InvokeAsync(IMiddlewareContext context)
        {
            await _next(context).ConfigureAwait(false);

            IValueNode sortArgument = context.Argument <IValueNode>(_contextData.ArgumentName);

            if (sortArgument is null || sortArgument is NullValueNode)
            {
                return;
            }

            IQueryable <T> source = null;

            if (context.Result is IQueryable <T> q)
            {
                source = q;
            }
            else if (context.Result is IEnumerable <T> e)
            {
                source = e.AsQueryable();
            }

            if (context.Result is PageableData <T> p)
            {
                source = p.Source;
            }
            else
            {
                p = null;
            }

            if (source != null &&
                context.Field.Arguments[_contextData.ArgumentName].Type is InputObjectType iot &&
                iot is ISortInputType fit)
            {
                QueryableSortVisitor visitor;
                if (source is EnumerableQuery)
                {
                    visitor = new QueryableSortVisitorInMemory(iot, fit.EntityType);
                }
                else
                {
                    visitor = new QueryableSortVisitor(iot, fit.EntityType);
                }

                sortArgument.Accept(visitor);

                source         = visitor.Sort(source);
                context.Result = p is null
                    ? (object)source
                    : new PageableData <T>(source, p.Properties);
            }
        }
        public async Task InvokeAsync(IMiddlewareContext context)
        {
            await _next(context).ConfigureAwait(false);

            IValueNode sortArgument = context.Argument <IValueNode>(
                SortObjectFieldDescriptorExtensions.OrderByArgumentName);

            if (sortArgument is null || sortArgument is NullValueNode)
            {
                return;
            }

            IQueryable <T> source = null;

            if (context.Result is IQueryable <T> q)
            {
                source = q;
            }
            else if (context.Result is IEnumerable <T> e)
            {
                source = e.AsQueryable();
            }

            if (source != null &&
                context.Field
                .Arguments[SortObjectFieldDescriptorExtensions.OrderByArgumentName]
                .Type is InputObjectType iot &&
                iot is ISortInputType fit)
            {
                var visitor = new QueryableSortVisitor(
                    iot,
                    fit.EntityType);
                sortArgument.Accept(visitor);

                source         = visitor.Sort(source);
                context.Result = source;
            }
        }
        public async Task InvokeAsync(IMiddlewareContext context)
        {
            await _next(context).ConfigureAwait(false);

            IValueNode filter = context.ArgumentLiteral <IValueNode>("where");

            if (filter is null || filter is NullValueNode)
            {
                return;
            }

            IQueryable <T> source = null;

            if (context.Result is IQueryable <T> q)
            {
                source = q;
            }
            else if (context.Result is IEnumerable <T> e)
            {
                source = e.AsQueryable();
            }

            if (source != null &&
                context.Field.Arguments["where"].Type is InputObjectType iot &&
                iot is IFilterInputType fit)
            {
                var visitor = new QueryableFilterVisitor(
                    iot,
                    fit.EntityType,
                    _converter);
                filter.Accept(visitor);

                source         = source.Where(visitor.CreateFilter <T>());
                context.Result = source;
            }
        }