protected override SqlPack Where(MemberExpression expression, SqlPack sqlPack)
        {
            //datetime.now
            if (expression.Member.DeclaringType == ResolveConstants.TypeOfDateTime)//日期转换
            {
                var    value         = expression.GetValueOfExpression(sqlPack, false);
                object valueDatetime = sqlPack.SqlDialectProvider.ConvertDateTime(expression.Member, value);
                sqlPack.AddDbParameter(valueDatetime);
                return(sqlPack);
            }
            else if (expression.Member.Name == "Length" && expression.Member.DeclaringType == ResolveConstants.TypeOfString)//长度转换
            {
                MemberExpression memberEx  = expression.Expression as MemberExpression;
                string           tableName = GetTableNameByExpression(memberEx, sqlPack);
                sqlPack.SetTableAlias(tableName);
                string tableAlias = sqlPack.GetTableAlias(tableName);
                if (!string.IsNullOrWhiteSpace(tableAlias))
                {
                    tableAlias += ".";
                }
                string param = tableAlias + memberEx.Member.Name;

                sqlPack += " " + sqlPack.SqlDialectProvider.ConvertDbFunction(DbFunctionType.Length, param);
                //sqlPack += ("LEN(");
                //Where(((MemberExpression)expression.Expression), sqlPack);
                //sqlPack += (")");

                return(sqlPack);
            }
            else if (expression.Member.MemberType == MemberTypes.Property || expression.Member.MemberType == MemberTypes.Field)
            {
                object val = null;
                if (expression.TryGetValueOfMemberExpressionWithFormat(sqlPack, out val, false))//如果能获取值就能直接引用变量的值,如 where(p=>p.Id > info.Id)
                {
                    val = val.SqlVerifyFragment2();

                    sqlPack.AddDbParameter(val);

                    return(sqlPack);
                }
                else
                {
                    string tableName = GetTableNameByExpression(expression, sqlPack);
                    sqlPack.SetTableAlias(tableName);                     //expression.Member.DeclaringType.Name
                    string tableAlias = sqlPack.GetTableAlias(tableName); //expression.Member.DeclaringType.Name
                    if (!string.IsNullOrWhiteSpace(tableAlias))
                    {
                        tableAlias += ".";
                    }
                    sqlPack += " " + tableAlias + expression.Member.Name;

                    //sqlPack.HasParamName = true;
                    return(sqlPack);
                }
            }

            sqlPack.AddDbParameter(expression.GetValueOfExpression(sqlPack, false));
            return(sqlPack);
        }
Exemplo n.º 2
0
        protected override SqlPack Insert(NewExpression expression, SqlPack sqlPack)
        {
            StringBuilder columns = new StringBuilder();

            for (int i = 0; i < expression.Members.Count; i++)
            {
                MemberInfo m = expression.Members[i];
                //ConstantExpression c = expression.Arguments[i] as ConstantExpression;
                //object value = c.Value;
                columns.Append(m.Name);
                columns.Append(",");

                object value = expression.Arguments[i].GetValueOfExpression(sqlPack, false);
                sqlPack.AddDbParameter(value);
                sqlPack += ",";
            }
            columns = columns.Remove(columns.Length - 1, 1);

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

            sqlPack.FormatSql(columns.ToString());
            return(sqlPack);
        }
Exemplo n.º 3
0
        protected override SqlPack In(ConstantExpression expression, SqlPack sqlPack)
        {
            //sqlPack += " (";


            object value = expression.GetValueOfExpression(sqlPack, false);

            value = value.SqlVerifyFragment2();
            sqlPack.AddDbParameter(value);


            //sqlPack += ")";


            //if (expression.Type == ResolveConstants.TypeOfString || expression.Type.Name == "String")
            //{
            //    sqlPack.Sql.AppendFormat("'{0}',", value);
            //}
            //else
            //{
            //    sqlPack.Sql.AppendFormat("{0},", value);
            //}
            return(sqlPack);

            //         object value = expression.GetValueOfExpression(sqlPack);
            //if (expression.Type == ResolveConstants.TypeOfString || expression.Type.Name == "String")
            //{
            //             sqlPack.Sql.AppendFormat("'{0}',", value);
            //}
            //else
            //{
            //             sqlPack.Sql.AppendFormat("{0},", value);
            //}
            //return sqlPack;
        }
Exemplo n.º 4
0
        protected override SqlPack Insert(MemberInitExpression expression, SqlPack sqlPack)
        {
            var           datas   = GetValueOfMemberInit(expression);
            StringBuilder columns = new StringBuilder();
            MemberInfo    m       = null;
            object        value   = null;

            foreach (var item in datas)
            {
                m = item.Key;
                columns.Append(m.Name);
                columns.Append(",");

                value = item.Value.GetValueOfExpression(sqlPack, false);
                sqlPack.AddDbParameter(value);
                sqlPack += ",";
            }

            columns = columns.Remove(columns.Length - 1, 1);

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

            sqlPack.FormatSql(columns.ToString());
            return(sqlPack);
        }
Exemplo n.º 5
0
 protected override SqlPack Update(NewExpression expression, SqlPack sqlPack)
 {
     for (int i = 0; i < expression.Members.Count; i++)
     {
         MemberInfo m = expression.Members[i];
         //ConstantExpression c = expression.Arguments[i] as ConstantExpression;
         sqlPack += m.Name + " =";
         object value = expression.Arguments[i].GetValueOfExpression(sqlPack, false);
         sqlPack.AddDbParameter(value);
         sqlPack += ",";
     }
     if (sqlPack[sqlPack.Length - 1] == ',')
     {
         sqlPack.Sql.Remove(sqlPack.Length - 1, 1);
     }
     return(sqlPack);
 }
Exemplo n.º 6
0
        protected override SqlPack Where(ConstantExpression expression, SqlPack sqlPack)
        {
            //object value =  ConvertToData(expression, sqlPack);//expression.Value
            object value = expression.GetValueOfExpression(sqlPack, false);

            //if (sqlPack.WhereConditionIndex ==1 && expression.Type == typeof(bool)) //只有第一次where才会拼接 1=1 或者1=0
            //{
            //    string str = (int)value == 1 ? TrueLiteral : FalseLiteral;
            //    sqlPack += " "+str;
            //    return sqlPack;

            //}
            value = value.SqlVerifyFragment2();

            sqlPack.AddDbParameter(value);
            return(sqlPack);
        }
Exemplo n.º 7
0
        protected override SqlPack OrderBy(MethodCallExpression expression, SqlPack sqlPack)
        {
            object methodValue = null;

            if (expression.TryGetValueOfMethodCallExpression(out methodValue))
            {
                //默认执行方法
                var value = methodValue;// sqlPack.SqlDialectProvider.FormatValue(methodValue);
                value = value.SqlVerifyFragment2();
                sqlPack.AddDbParameter(value);

                //sqlPack += " " + sqlPack.SqlDialectProvider.FormatValue(methodValue);
                sqlPack.CurrentDbFunctionResult = null;

                return(sqlPack);
            }


            var key = expression.Method;

            if (key.IsGenericMethod)
            {
                key = key.GetGenericMethodDefinition();
            }



            Action <MethodCallExpression, SqlPack> action;

            if (_Methods.TryGetValue(key.Name, out action))
            {
                action(expression, sqlPack);

                sqlPack += " " + sqlPack.CurrentDbFunctionResult;
                sqlPack.CurrentDbFunctionResult = null;

                return(sqlPack);
            }

            throw new NotImplementedException("无法解析方法" + expression.Method);
        }
Exemplo n.º 8
0
        protected override SqlPack In(NewArrayExpression expression, SqlPack sqlPack)
        {
            sqlPack += " (";

            List <object> args = new List <object>();

            foreach (Expression expressionItem in expression.Expressions)
            {
                args.Add(expressionItem.GetValueOfExpression(sqlPack, false));
                //FluentExpressionSQLProvider.In(expressionItem, sqlPack);
            }
            sqlPack.AddDbParameter(args);
            //if (sqlPack.Sql[sqlPack.Sql.Length - 1] == ',')
            //{
            //    sqlPack.Sql.Remove(sqlPack.Sql.Length - 1, 1);
            //}

            sqlPack += ")";

            return(sqlPack);
        }
        protected override SqlPack Join(MemberExpression expression, SqlPack sqlPack)
        {
            if (expression.Expression != null && expression.Expression is ConstantExpression)
            {
                object value = expression.GetValueOfExpression(sqlPack, false); //expression.Value
                sqlPack.AddDbParameter(value);
                return(sqlPack);
            }

            string tableName = GetTableNameByExpression(expression, sqlPack);

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

            if (!string.IsNullOrWhiteSpace(tableAlias))
            {
                tableAlias += ".";
            }
            sqlPack += " " + tableAlias + expression.Member.Name;

            return(sqlPack);
        }
Exemplo n.º 10
0
        protected override SqlPack Update(MemberInitExpression expression, SqlPack sqlPack)
        {
            var datas = GetValueOfMemberInit(expression);

            MemberInfo m     = null;
            object     value = null;

            foreach (var item in datas)
            {
                m        = item.Key;
                sqlPack += m.Name + " =";
                value    = item.Value.GetValueOfExpression(sqlPack, false);
                sqlPack.AddDbParameter(value);
                sqlPack += ",";
            }

            if (sqlPack[sqlPack.Length - 1] == ',')
            {
                sqlPack.Sql.Remove(sqlPack.Length - 1, 1);
            }
            return(sqlPack);
        }
Exemplo n.º 11
0
        protected override SqlPack Where(MethodCallExpression expression, SqlPack sqlPack)
        {
            //if (expression.Object != null && expression.Object.CanGetValue())
            //{
            //    object value = null;

            //    value = expression.Object.GetValueOfExpression(sqlPack);
            //    if (value != null)
            //    {
            //        sqlPack += " " + value;
            //        sqlPack.CurrentDbFunctionResult = null;
            //        return sqlPack;
            //    }
            //}

            object methodValue = null;

            if (expression.TryGetValueOfMethodCallExpression(out methodValue))
            {
                //默认执行方法
                var value = methodValue;// sqlPack.SqlDialectProvider.FormatValue(methodValue);
                value = value.SqlVerifyFragment2();
                sqlPack.AddDbParameter(value);

                //sqlPack += " " + sqlPack.SqlDialectProvider.FormatValue(methodValue);



                sqlPack.CurrentDbFunctionResult = null;

                return(sqlPack);
            }


            var key = expression.Method;

            if (key.IsGenericMethod)
            {
                key = key.GetGenericMethodDefinition();
            }



            Action <MethodCallExpression, SqlPack> action;

            if (_Methods.TryGetValue(key.Name, out action))
            {
                action(expression, sqlPack);
                //if (expression.Object != null)
                //{
                //    FluentExpressionSQLProvider.Where(expression.Object, sqlPack);
                //}
                //sqlPack.AddDbParameter(sqlPack.CurrentDbFunctionResult);
                sqlPack += " " + sqlPack.CurrentDbFunctionResult;
                sqlPack.CurrentDbFunctionResult = null;

                return(sqlPack);
            }

            throw new NotImplementedException("无法解析方法" + expression.Method);
        }