private static ArgumentDefinition ConfigureArgumentName( this ArgumentDefinition definition) { ILazyTypeConfiguration lazyArgumentConfiguration = LazyTypeConfigurationBuilder .New <ArgumentDefinition>() .Definition(definition) .Configure((context, definition) => { IFilterConvention convention = context.DescriptorContext.GetFilterConvention(); definition.Name = convention.GetArgumentName(); }) .On(ApplyConfigurationOn.Completion) .Build(); definition.Configurations.Add(lazyArgumentConfiguration); return(definition); }
public Expression HandleLeave( SelectionVisitorContext context, IFieldSelection selection, Expression expression) { IFilterConvention convention = context.SelectionContext.FilterConvention; NameString argumentName = convention.GetArgumentName(); if (context.TryGetValueNode(argumentName, out IValueNode? filter) && selection.Field.Arguments[argumentName].Type is InputObjectType iot && iot is IFilterInputType fit && convention.TryGetVisitorDefinition( out FilterExpressionVisitorDefinition? defintion)) { var visitorContext = new QueryableFilterVisitorContext( iot, fit.EntityType, defintion, context.Conversion, false); QueryableFilterVisitor.Default.Visit(filter, visitorContext); if (visitorContext.TryCreateLambda( out LambdaExpression? filterExpression)) { return(Expression.Call( typeof(Enumerable), nameof(Enumerable.Where), new[] { fit.EntityType }, expression, filterExpression)); } else { context.ReportErrors(visitorContext.Errors); } } return(expression); }