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);
        }