public static Expression EvaluateIndependentSubtrees(Expression expression)
        {
            var partialEvaluationInfo = NhEvaluatableTreeFindingExpressionVisitor.Analyze(expression, ExpressionFilter);
            var visitor             = new NhPartialEvaluatingExpressionVisitor(partialEvaluationInfo);
            var evaluatedExpression = visitor.Visit(expression);

            return(evaluatedExpression);
        }
        /// <summary>
        /// Takes an expression tree and finds and evaluates all its evaluatable subtrees.
        /// </summary>
        public static Expression EvaluateIndependentSubtrees(
            Expression expressionTree,
            PreTransformationParameters preTransformationParameters)
        {
            var partialEvaluationInfo = EvaluatableTreeFindingExpressionVisitor.Analyze(
                expressionTree,
                preTransformationParameters.EvaluatableExpressionFilter);
            var visitor = new NhPartialEvaluatingExpressionVisitor(partialEvaluationInfo, preTransformationParameters);

            return(visitor.Visit(expressionTree));
        }