public static bool TryVisitSelect(this MethodCallExpression node, SelectExpressionsCollection options, MemberContext context, out MemberContext newContext) { newContext = null; bool result = node.Method.DeclaringType == typeof(Queryable) && node.Method.Name == Select; if (result) { Expression arg = node.Arguments[1]; if (arg.NodeType == ExpressionType.Quote) { LambdaExpression lambda = (LambdaExpression)node.Arguments[1].StripQuotes(); if (lambda.Body is NewExpression selectMember) { newContext = new SelectContext(selectMember, context); } if (lambda.Body is MemberInitExpression memberInit) { newContext = new SelectContext(memberInit, context); } if (lambda.Body is ParameterExpression) { newContext = context; return(result); } if (newContext != null) { options.Fields.Clear(); SelectFieldsVisitor visitor = new SelectFieldsVisitor(context, options); visitor.Visit(lambda.Body); return(result); } } throw new InvalidOperationException($"Unable to translate '{Select}' method."); } return(result); }
public SolrQueryProvider( IExecuter <TEntity> operations, SolrNetLinqOptions options, MemberContext context, SelectExpressionsCollection selectExpressions) { Operations = operations ?? throw new ArgumentNullException(nameof(operations)); Options = options ?? throw new ArgumentNullException(nameof(options)); SelectExpressions = selectExpressions ?? new SelectExpressionsCollection(); if (context == null) { this.MemberContext = MemberContext.ForType <TEntity>(); this.MemberContext.FieldSerializer = this.Options.SolrFieldSerializer; this.MemberContext.MappingManager = this.Options.MappingManager; } else { this.MemberContext = context; } }
public SolrQueryTranslator(SolrNetLinqOptions solrNetLinqOptions, MemberContext context, SelectExpressionsCollection selectExpressions) { SolrNetLinqOptions = solrNetLinqOptions ?? throw new ArgumentNullException(nameof(solrNetLinqOptions)); Context = context ?? throw new ArgumentNullException(nameof(context)); SelectExpressions = selectExpressions ?? throw new ArgumentNullException(nameof(selectExpressions)); Options = selectExpressions.QueryOptions; }