private ExpressionToSqlmpl <T> SelectParser(Expression expression, Expression expressionBody, params Type[] ary)
        {
            this.Clear();
            this._sqlBuilder.IsSingleTable = false;

            if (expressionBody != null && expressionBody.Type == typeof(T))
            {
                throw new ArgumentException("cannot be parse expression", "expression");
            }

            foreach (var item in ary)
            {
                string tableName = item.Name;
                this._sqlBuilder.SetTableAlias(GetTableName(tableName));
            }

            string sql = "select {0}\nfrom " + GetTableName(this._mainTableName) + " " + this._sqlBuilder.GetTableAlias(GetTableName(this._mainTableName));

            if (expression == null)
            {
                _sqlBuilder.AppendFormat(sql, "*");
            }
            else
            {
                ExpressionToSqlProvider.Select(expressionBody, this._sqlBuilder);
                _sqlBuilder.AppendFormat(sql, this._sqlBuilder.SelectFieldsStr);
            }

            return(this);
        }
Ejemplo n.º 2
0
 protected override SqlBuilder OrderBy(NewExpression expression, SqlBuilder sqlBuilder)
 {
     foreach (Expression item in expression.Arguments)
     {
         ExpressionToSqlProvider.OrderBy(item, sqlBuilder);
     }
     return(sqlBuilder);
 }
        public ExpressionToSqlmpl <T> OrderBy(Expression <Func <T, object> > expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression", "Value cannot be null");
            }

            _sqlBuilder += "\norder by ";
            ExpressionToSqlProvider.OrderBy(expression.Body, this._sqlBuilder);
            return(this);
        }
        public ExpressionToSqlmpl <T> Sum(Expression <Func <T, object> > expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression", "Value cannot be null");
            }

            Clear();
            ExpressionToSqlProvider.Sum(expression.Body, this._sqlBuilder);
            return(this);
        }
Ejemplo n.º 5
0
 private static void LikeRight(MethodCallExpression expression, SqlBuilder sqlBuilder)
 {
     if (expression.Object != null)
     {
         ExpressionToSqlProvider.Where(expression.Object, sqlBuilder);
     }
     ExpressionToSqlProvider.Where(expression.Arguments[0], sqlBuilder);
     sqlBuilder += " like concat(";
     ExpressionToSqlProvider.Where(expression.Arguments[1], sqlBuilder);
     sqlBuilder += ",'%') ";
 }
        public ExpressionToSqlmpl <T> Update(Expression <Func <object> > expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression", "Value cannot be null");
            }

            Clear();
            _sqlBuilder.IsSingleTable = true;
            _sqlBuilder.AppendFormat("update {0} set ", GetTableName(this._mainTableName));
            ExpressionToSqlProvider.Update(expression.Body, this._sqlBuilder);
            return(this);
        }
Ejemplo n.º 7
0
        protected override SqlBuilder Select(NewExpression expression, SqlBuilder sqlBuilder)
        {
            foreach (Expression item in expression.Arguments)
            {
                ExpressionToSqlProvider.Select(item, sqlBuilder);
            }

            foreach (MemberInfo item in expression.Members)
            {
                sqlBuilder.SelectFieldsAlias.Add(item.Name);
            }

            return(sqlBuilder);
        }
        private ExpressionToSqlmpl <T> JoinParser2 <T2, T3>(Expression <Func <T2, T3, bool> > expression, string leftOrRightJoin = "")
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression", "Value cannot be null");
            }

            string joinTableName = typeof(T3).Name;

            this._sqlBuilder.SetTableAlias(GetTableName(joinTableName));
            this._sqlBuilder.AppendFormat("\n{0}join {1} on", leftOrRightJoin, GetTableName(joinTableName) + " " + this._sqlBuilder.GetTableAlias(GetTableName(joinTableName)));
            ExpressionToSqlProvider.Join(expression.Body, this._sqlBuilder);
            return(this);
        }
        protected override SqlBuilder In(NewArrayExpression expression, SqlBuilder sqlBuilder)
        {
            sqlBuilder += "(";

            foreach (Expression expressionItem in expression.Expressions)
            {
                ExpressionToSqlProvider.In(expressionItem, sqlBuilder);
            }

            if (sqlBuilder[sqlBuilder.Length - 1] == ',')
            {
                sqlBuilder.Remove(sqlBuilder.Length - 1, 1);
            }

            sqlBuilder += ")";

            return(sqlBuilder);
        }
        protected override SqlBuilder Join(BinaryExpression expression, SqlBuilder sqlBuilder)
        {
            ExpressionToSqlProvider.Join(expression.Left, sqlBuilder);
            int operatorIndex = sqlBuilder.Length;

            ExpressionToSqlProvider.Join(expression.Right, sqlBuilder);
            int sqlLength = sqlBuilder.Length;

            if (sqlLength - operatorIndex == 5 && sqlBuilder.Sql.EndsWith("null"))
            {
                OperatorParser(expression.NodeType, operatorIndex, sqlBuilder, true);
            }
            else
            {
                OperatorParser(expression.NodeType, operatorIndex, sqlBuilder);
            }

            return(sqlBuilder);
        }
        public ExpressionToSqlmpl <T> Count(Expression <Func <T, object> > expression = null)
        {
            this.Clear();
            if (expression == null)
            {
                string tableName = GetTableName(typeof(T).Name);

                _sqlBuilder.SetTableAlias(tableName);
                string tableAlias = _sqlBuilder.GetTableAlias(tableName);

                if (!string.IsNullOrWhiteSpace(tableAlias))
                {
                    tableName += " " + tableAlias;
                }
                _sqlBuilder.AppendFormat("select count(*) from {0}", tableName);
            }
            else
            {
                ExpressionToSqlProvider.Count(expression.Body, this._sqlBuilder);
            }

            return(this);
        }
        public ExpressionToSqlmpl <T> Where(Expression <Func <T, bool> > expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression", "Value cannot be null");
            }

            if (expression.Body != null && expression.Body.NodeType == ExpressionType.Constant)
            {
                throw new ArgumentException("Cannot be parse expression", "expression");
            }

            if (this._sqlBuilder.Sql.Contains("where"))
            {
                this._sqlBuilder += "\n&&";
            }
            else
            {
                this._sqlBuilder += "\nwhere";
            }
            ExpressionToSqlProvider.Where(expression.Body, this._sqlBuilder);
            return(this);
        }
        protected override SqlBuilder Where(BinaryExpression expression, SqlBuilder sqlBuilder)
        {
            if (IsNeedsParentheses(expression, expression.Left))
            {
                sqlBuilder += "(";
                ExpressionToSqlProvider.Where(expression.Left, sqlBuilder);
                sqlBuilder += ")";
            }
            else
            {
                ExpressionToSqlProvider.Where(expression.Left, sqlBuilder);
            }
            int signIndex = sqlBuilder.Length;

            if (IsNeedsParentheses(expression, expression.Right))
            {
                sqlBuilder += "(";
                ExpressionToSqlProvider.Where(expression.Right, sqlBuilder);
                sqlBuilder += ")";
            }
            else
            {
                ExpressionToSqlProvider.Where(expression.Right, sqlBuilder);
            }
            int sqlLength = sqlBuilder.Length;

            if (sqlLength - signIndex == 5 && sqlBuilder.ToString().EndsWith("null"))
            {
                OperatorParser(expression.NodeType, signIndex, sqlBuilder, true);
            }
            else
            {
                OperatorParser(expression.NodeType, signIndex, sqlBuilder);
            }

            return(sqlBuilder);
        }
Ejemplo n.º 14
0
 private static void InnerIn(MethodCallExpression expression, SqlBuilder sqlBuilder)
 {
     ExpressionToSqlProvider.Where(expression.Arguments[0], sqlBuilder);
     sqlBuilder += " in";
     ExpressionToSqlProvider.In(expression.Arguments[1], sqlBuilder);
 }
Ejemplo n.º 15
0
 protected override SqlBuilder OrderBy(ParameterExpression expression, SqlBuilder sqlBuilder)
 {
     ExpressionToSqlProvider.OrderBy(expression, sqlBuilder);
     return(sqlBuilder);
 }
Ejemplo n.º 16
0
 protected override SqlBuilder Select(ParameterExpression expression, SqlBuilder sqlBuilder)
 {
     ExpressionToSqlProvider.Select(expression, sqlBuilder);
     return(sqlBuilder);
 }
Ejemplo n.º 17
0
 protected override SqlBuilder GroupBy(UnaryExpression expression, SqlBuilder sqlBuilder)
 {
     ExpressionToSqlProvider.GroupBy(expression.Operand, sqlBuilder);
     return(sqlBuilder);
 }
Ejemplo n.º 18
0
 protected override SqlBuilder Select(UnaryExpression expression, SqlBuilder sqlBuilder)
 {
     ExpressionToSqlProvider.Select(expression.Operand, sqlBuilder);
     return(sqlBuilder);
 }