private static bool KeepSurroundingParentheses(Expression expression) { switch (expression.NodeType) { case ExpressionType.Conditional: case ExpressionType.Lambda: return(true); case ExpressionType.Call: var parentExpression = expression.GetParentOrNull(); while (parentExpression != null) { expression = parentExpression; parentExpression = expression.GetParentOrNull(); } switch (expression.NodeType) { case ExpressionType.Add: case ExpressionType.Convert: case ExpressionType.Multiply: case ExpressionType.Subtract: return(true); } return(false); case ExpressionType.Invoke: var invocation = (InvocationExpression)expression; return(invocation.Expression.NodeType == ExpressionType.Lambda); } return(false); }