示例#1
0
        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);
        }
示例#2
0
        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;
 }