protected virtual string GetOperator(UnaryExpression u) { switch (u.NodeType) { case SqlExpressionType.Exists: return "EXISTS"; case SqlExpressionType.IsNull: return "IS NULL"; case SqlExpressionType.Negate: return "-"; case SqlExpressionType.Not: return "NOT"; case SqlExpressionType.UnaryPlus: return "+"; default: throw new NotSupportedException("不支持的操作符:" + u.NodeType); } }
protected override SqlExpression VisitUnary(UnaryExpression expr) { if (expr.NodeType == SqlExpressionType.IsNull) { this.Write("("); this.Visit(expr.Operand); this.Write(") "); this.Write(GetOperator(expr)); } else { this.Write(GetOperator(expr)); this.Write(" ("); this.Visit(expr.Operand); this.Write(") "); } return expr; }