Пример #1
0
        private UpdateBuilder <T> InternalAppend(string field, Expression value)
        {
            if (!__sql.IsEmpty)
            {
                __sql.Append(", ");
            }
            __sql.AppendFormat("{0} = ", field);
            base.Visit(value);

            return(this);
        }
Пример #2
0
        private WhereBuilder Append(Expression property, QueryOperatorType op, object value, string type)
        {
            if (property != null && value != null)
            {
                if (!__sql.IsEmpty)
                {
                    __sql.Append(type);
                }

                __sql.Append("(");
                __sql.Append(__db.GetColumnName(property));
                __sql.Append(this.GetOperator(op));
                __sql.AppendFormat("@{0}", this.Params.Count);
                __sql.Append(")");

                switch (op)
                {
                case QueryOperatorType.Contains:
                    value = "%" + value.ToString().Trim('%') + "%";
                    break;

                case QueryOperatorType.StartsWith:
                    value = value.ToString().Trim('%') + "%";
                    break;

                case QueryOperatorType.EndsWith:
                    value = "%" + value.ToString().Trim('%');
                    break;
                }
                this.Params.Add(value);
            }

            return(this);
        }
Пример #3
0
        private void ParseExists(MethodCallExpression expression, bool isNotExists)
        {
            var value = this.GetRightValue(expression.Arguments[1]);

            if (value is IGetBuilder)
            {
                var val = value as IGetBuilder;
                __select.AppendFormat("({1} Exists ({0}))", val.GetSql(context.Parameters), isNotExists ? "NOT" : "");
            }
        }
Пример #4
0
        private GetBuilder <T> InternalJoin <TJoin>(string join, Expression expression) where TJoin : IModel
        {
            if (__join.IsNull())
            {
                __join = new STR();
            }
            __join.AppendFormat(" {0} {1} ON {2} ",
                                join, database.GetTableName <TJoin>(),
                                new JoinBuilder(context).Append(expression).ToString());

            return(this);
        }
Пример #5
0
 /// <summary>
 /// 处理字段或属性表达式
 /// </summary>
 /// <param name="expression">表达式</param>
 /// <returns>表达式</returns>
 protected override Expression VisitMemberAccess(MemberExpression expression)
 {
     if (!__sql.IsEmpty)
     {
         __sql.Append(", ");
     }
     if (IsParameterOrConstant(expression))
     {
         if (IsDateTimeProperty(expression))
         {
             ParseDateTimeProperty(expression);
         }
         else
         {
             __sql.Append(this.GetColumnName(withTableName, context.Database, expression));
         }
     }
     else
     {
         __sql.AppendFormat("@{0}", context.Parameters.Count);
         context.Parameters.Add(this.GetRightValue(expression));
     }
     return(expression);
 }
Пример #6
0
        /// <summary>
        /// 处理字段或属性表达式
        /// </summary>
        /// <param name="expression">表达式</param>
        /// <returns>表达式</returns>
        protected override Expression VisitMemberAccess(MemberExpression expression)
        {
            if (!select.IsEmpty && __needdelimiter)
            {
                select.Append(", ");
            }
            if (IsParameterOrConstant(expression))
            {
                if (IsDateTimeProperty(expression))
                {
                    ParseDateTimeProperty(expression);
                }
                else
                {
                    select.Append(this.GetColumnName(whitTableName, context.Database, expression));
                }
            }
            else
            {
                var value = this.GetRightValue(expression);
                if (value is IGetBuilder)
                {
                    select.Append((value as IGetBuilder).GetSql(context.Parameters));
                }
                else
                {
                    if (value.IsValue_())
                    {
                        select.Append(value);
                    }
                    else
                    {
                        select.AppendFormat("'{0}'", value);
                    }
                }
            }

            return(expression);
        }
Пример #7
0
        /// <summary>
        /// 处理二元运算表达式
        /// </summary>
        /// <param name="expression">表达式</param>
        /// <returns>表达式</returns>
        protected override Expression VisitBinary(BinaryExpression expression)
        {
            if (expression.Right is ConstantExpression && (expression.NodeType == ExpressionType.Equal || expression.NodeType == ExpressionType.NotEqual))
            {//X == null or X !=null
                var constant            = expression.Right as ConstantExpression;
                MemberExpression member = null;
                if (expression.Left is MemberExpression)
                {
                    member = expression.Left as MemberExpression;
                }
                if (expression.Left is UnaryExpression)
                {
                    if (((UnaryExpression)expression.Left).Operand is MemberExpression)
                    {
                        member = ((UnaryExpression)expression.Left).Operand as MemberExpression;
                    }
                }

                if (member != null && constant.Value == null)
                {
                    if (expression.NodeType == ExpressionType.Equal)
                    {
                        __sql.AppendFormat("( {0} IS NULL )", this.GetColumnName(withTableName, Database, member));
                    }
                    else
                    {
                        __sql.AppendFormat("( {0} IS NOT NULL )", this.GetColumnName(withTableName, Database, member));
                    }
                    return(expression);
                }
            }

            __sql.Append("(");
            this.Visit(expression.Left);
            __sql.Append(this.GetOperator(expression.NodeType));
            this.Visit(expression.Right);
            __sql.Append(")");

            return(expression);
        }