예제 #1
0
 string GetOperator(SqlBinaryExpression expression)
 {
     switch (expression.NodeType)
     {
         case SqlNodeType.BitwiseAnd:
             return "&";
         case SqlNodeType.And:
             return " AND ";
         case SqlNodeType.BitwiseOr:
             return "|";
         case SqlNodeType.Or:
             return " OR ";
         case SqlNodeType.LessThan:
             return " < ";
         case SqlNodeType.LessThanOrEqual:
             return " <= ";
         case SqlNodeType.GreaterThan:
             return " > ";
         case SqlNodeType.GreaterThanOrEqual:
             return " >= ";
         case SqlNodeType.Equal:
             return " = ";
         case SqlNodeType.NotEqual:
             return " <> ";
         case SqlNodeType.In:
             return " IN ";
         case SqlNodeType.Is:
             return " IS ";
         case SqlNodeType.IsNot:
             return " IS NOT ";
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
        protected override SqlExpression Visit(SqlBinaryExpression expression)
        {
            switch (expression.NodeType)
            {
                case SqlNodeType.And:
                case SqlNodeType.BitwiseAnd:
                case SqlNodeType.Or:
                case SqlNodeType.BitwiseOr:
                    return base.Visit(expression);
            }

            return expression;
        }
예제 #3
0
        protected override SqlExpression Visit(SqlBinaryExpression expression)
        {
            if (expression.Right.NodeType == SqlNodeType.Constant &&
                ((SqlConstantExpression) expression.Right).Value == null)
            {
                switch (expression.NodeType)
                {
                    case SqlNodeType.Equal:
                        return new SqlBinaryExpression(SqlNodeType.Is, expression.Left, new SqlConstantExpression(typeof(object), null));
                    case SqlNodeType.NotEqual:
                        return new SqlBinaryExpression(SqlNodeType.IsNot, expression.Left, new SqlConstantExpression(typeof(object), null));
                }
            }

            return base.Visit(expression);
        }
예제 #4
0
        protected override SqlExpression Visit(SqlBinaryExpression expression)
        {
            sql.Append("(");

            switch (expression.NodeType)
            {
                case SqlNodeType.BitwiseAnd:
                case SqlNodeType.And:
                case SqlNodeType.BitwiseOr:
                case SqlNodeType.Or:
                case SqlNodeType.LessThan:
                case SqlNodeType.LessThanOrEqual:
                case SqlNodeType.GreaterThan:
                case SqlNodeType.GreaterThanOrEqual:
                case SqlNodeType.Equal:
                case SqlNodeType.NotEqual:
                case SqlNodeType.In:
                case SqlNodeType.Is:
                case SqlNodeType.IsNot:
                    Visit(expression.Left);
                    sql.Append(GetOperator(expression));
                    Visit(expression.Right);
                    break;
                case SqlNodeType.LikeStartsWith:
                    Visit(expression.Left);
                    sql.Append(" LIKE ");
                    Visit(expression.Right);
                    sql.Append(" + '%'");
                    break;
                case SqlNodeType.LikeContains:
                    Visit(expression.Left);
                    sql.Append(" LIKE ");
                    sql.Append("'%' + ");
                    Visit(expression.Right);
                    sql.Append(" + '%'");
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            sql.Append(")");

            return expression;
        }
예제 #5
0
 protected virtual SqlExpression Visit(SqlBinaryExpression expression)
 {
     return new SqlBinaryExpression(expression.NodeType, Visit(expression.Left), Visit(expression.Right));
 }