public static Expression Evaluate(Expression expression, Func <Expression, bool> predicate)
        {
            HashSet <Expression> canidates = new EvaluationNominator(predicate).Nominate(expression);

            return(new SubtreeEvaluator(canidates).Visit(expression));
        }
 public static Expression Evaluate(Expression expression, Func<Expression, bool> predicate)
 {
   HashSet<Expression> canidates = new EvaluationNominator(predicate).Nominate(expression);
   return new SubtreeEvaluator(canidates).Visit(expression);
 }