示例#1
0
        public static Expression ExtractParameters(
            [NotNull] Expression expressionTree,
            [NotNull] QueryContext queryContext)
        {
            var functionEvaluationDisabledExpression = new FunctionEvaluationDisablingVisitor().Visit(expressionTree);
            var partialEvaluationInfo = EvaluatableTreeFindingExpressionVisitor.Analyze(functionEvaluationDisabledExpression);
            var visitor = new ParameterExtractingExpressionVisitor(partialEvaluationInfo, queryContext);

            return(visitor.Visit(functionEvaluationDisabledExpression));
        }
示例#2
0
        /// <summary>
        /// Takes an expression tree and finds and evaluates all its evaluatable subtrees.
        /// </summary>
        public static Expression EvaluateIndependentSubtrees(Expression expressionTree, IEvaluatableExpressionFilter evaluatableExpressionFilter)
        {
            ArgumentUtility.CheckNotNull("expressionTree", expressionTree);
            ArgumentUtility.CheckNotNull("evaluatableExpressionFilter", evaluatableExpressionFilter);

            var partialEvaluationInfo = EvaluatableTreeFindingExpressionVisitor.Analyze(expressionTree, evaluatableExpressionFilter);

            var visitor = new PartialEvaluatingExpressionVisitor(partialEvaluationInfo, evaluatableExpressionFilter);

            return(visitor.Visit(expressionTree));
        }
示例#3
0
        public static Expression ExtractParameters(
            [NotNull] Expression expression,
            [NotNull] QueryContext queryContext,
            [NotNull] IEvaluatableExpressionFilter evaluatableExpressionFilter)
        {
            var partialEvaluationInfo
                = EvaluatableTreeFindingExpressionVisitor
                  .Analyze(expression, evaluatableExpressionFilter);

            var visitor = new ParameterExtractingExpressionVisitor(partialEvaluationInfo, queryContext);

            return(visitor.Visit(expression));
        }
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public virtual Expression ExtractParameters([NotNull] Expression expression)
        {
            var oldPartialEvaluationInfo = _partialEvaluationInfo;

            _partialEvaluationInfo
                = EvaluatableTreeFindingExpressionVisitor
                  .Analyze(expression, _evaluatableExpressionFilter);

            try
            {
                return(Visit(expression));
            }
            finally
            {
                _partialEvaluationInfo = oldPartialEvaluationInfo;
            }
        }