예제 #1
0
        protected override SqlBinaryConstraint VisitSqlBinaryConstraint(SqlBinaryConstraint node)
        {
            var leftBinary  = node.Left as SqlBinaryConstraint;
            var rightBinary = node.Right as SqlBinaryConstraint;
            var isLeftOr    = leftBinary != null && leftBinary.Opeartor == SqlBinaryConstraintType.Or;
            var isRightOr   = rightBinary != null && rightBinary.Opeartor == SqlBinaryConstraintType.Or;

            switch (node.Opeartor)
            {
            case SqlBinaryConstraintType.And:
                if (isLeftOr)
                {
                    _sql.Append("(");
                }
                this.Visit(node.Left);
                if (isLeftOr)
                {
                    _sql.Append(")");
                }
                _sql.AppendAnd();
                if (isRightOr)
                {
                    _sql.Append("(");
                }
                this.Visit(node.Right);
                if (isRightOr)
                {
                    _sql.Append(")");
                }
                break;

            case SqlBinaryConstraintType.Or:
                this.Visit(node.Left);
                _sql.AppendOr();
                this.Visit(node.Right);
                break;

            default:
                throw new NotSupportedException();
            }

            return(node);
        }