public static Expression <Func <TDto, bool> > GetQueryableFilterExpr <TDto>(this IResolverContext context) { Expression <Func <TDto, bool> > filter = null; if (context.Field?.Arguments["where"]?.Type is InputObjectType whereIot && whereIot is IFilterInputType whereFit) { var whereValueNode = context.Argument <IValueNode>("where"); if (whereValueNode != null) { var queryableFilterVisitor = new QueryableFilterVisitor( whereIot, whereFit.EntityType, TypeConversion.Default); if (whereValueNode.Kind != NodeKind.NullValue) { whereValueNode.Accept(queryableFilterVisitor); filter = queryableFilterVisitor?.CreateFilter <TDto>(); } } } return(filter); }
public Expression HandleLeave( SelectionVisitorContext context, IFieldSelection selection, Expression expression) { if (context.TryGetValueNode("where", out IValueNode filter) && selection.Field.Arguments["where"].Type is InputObjectType iot && iot is IFilterInputType fit) { var visitor = new QueryableFilterVisitor( iot, fit.EntityType, context.Conversion); filter.Accept(visitor); return(Expression.Call( typeof(Enumerable), "Where", new[] { fit.EntityType }, expression, visitor.CreateFilter())); } return(expression); }