Пример #1
0
        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);
        }
Пример #2
0
        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);
        }