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); } }
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; } }