public static ICollection <Expression> Analyze(Expression expressionTree)
        {
            var visitor = new FindEvaluatableExpressionVisitor();

            visitor.Visit(expressionTree);
            return(visitor._evaluatableExpressions);
        }
        /// <summary>
        /// Takes an expression tree and finds and evaluates all its evaluatable subtrees.
        /// </summary>
        public static Expression Evaluate(Expression expressionTree)
        {
            var evaluatableExpressions = FindEvaluatableExpressionVisitor.Analyze(expressionTree);

            var visitor = new EvaluatingExpressionVisitor(expressionTree, evaluatableExpressions);

            return(visitor.Visit(expressionTree));
        }