protected override SqlCaluse Join(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            string col = CustomHandle(exp, sqlCaluse, false);

            sqlCaluse += col;
            return(sqlCaluse);
        }
        protected override SqlCaluse Select(ParameterExpression exp, SqlCaluse sqlCaluse)
        {
            var t     = exp.Type;
            var props = t.GetProperties();

            sqlCaluse.SetTableAlias(t);
            var alia = sqlCaluse.GetTableAlias(t);

            foreach (PropertyInfo item in props)
            {
                if (item.GetAttribute <IgnoreAttribute>() != null)
                {
                    continue;
                }
                var col = item.GetAttribute <ColumnNameAttribute>();
                if (col == null)
                {
                    sqlCaluse.SelectFields.Add($"{alia}{item.Name}");
                }
                else
                {
                    sqlCaluse.SelectFields.Add($"{alia}{col.Name} {item.Name}");
                }
            }
            return(sqlCaluse);
        }
        protected override SqlCaluse Max(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            var col = CustomHandle(exp, sqlCaluse);

            sqlCaluse.SelectMethod.Append($"MAX({col})");
            return(sqlCaluse);
        }
        protected override SqlCaluse SelectMethod(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            var temp = FindValue(exp, sqlCaluse);

            sqlCaluse.SelectMethod.Append(temp);
            return(sqlCaluse);
        }
        protected override SqlCaluse SelectMethod(ConstantExpression exp, SqlCaluse sqlCaluse)
        {
            var p = sqlCaluse.AddDbParameter(exp.Value);

            sqlCaluse.SelectMethod.Append(p);
            return(sqlCaluse);
        }
 private static SqlCaluse NotLikeMethod(MethodCallExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.Where(exp.Arguments[0], sqlCaluse);
     sqlCaluse         += " Not Like ";
     sqlCaluse.LikeMode = 1;
     ExpressionVisit.Where(exp.Arguments[1], sqlCaluse);
     return(sqlCaluse);
 }
        protected override SqlCaluse OrderBy(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            string col = CustomHandle(exp, sqlCaluse, false);

            sqlCaluse           += col;
            sqlCaluse.HasOrderBy = true;
            return(sqlCaluse);
        }
 private static SqlCaluse InMethod(MethodCallExpression exp, SqlCaluse sqlCaluse)
 {
     ExpressionVisit.Join(exp.Arguments[0], sqlCaluse);
     sqlCaluse += " In (";
     ExpressionVisit.In(exp.Arguments[1], sqlCaluse);
     sqlCaluse += ")";
     return(sqlCaluse);
 }
        private static SqlCaluse SelectCount(MethodCallExpression exp, SqlCaluse sqlCaluse)
        {
            var a = exp.Arguments[0];

            ExpressionVisit.SelectMethod(a, sqlCaluse);
            AddColumn(sqlCaluse, "\n COUNT(CASE WHEN{0} THEN 1 ELSE null END) ");
            return(sqlCaluse);
        }
        private static void AddColumn(SqlCaluse sqlCaluse, string columnTemplate)
        {
            var content = sqlCaluse.SelectMethod.ToString();
            var col     = string.Format(columnTemplate, content) + sqlCaluse.GetMemberName();

            sqlCaluse.SelectFields.Add(col);
            sqlCaluse.SelectMethod.Clear();
        }
 protected override SqlCaluse Select(MemberExpression exp, SqlCaluse sqlCaluse)
 {
     if (exp.Member.GetAttribute <IgnoreAttribute>() == null)
     {
         string col = CustomHandle(exp, sqlCaluse);
         sqlCaluse.SelectFields.Add(col);
     }
     return(sqlCaluse);
 }
示例#12
0
 protected override SqlCaluse GroupBy(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Arguments.Count; i++)
     {
         var argExp = exp.Arguments[i];
         ExpressionVisit.GroupBy(argExp, sqlCaluse);
     }
     return(sqlCaluse);
 }
        protected override SqlCaluse PrimaryKey(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            var name = exp.Member.Name;

            if (!sqlCaluse.IgnoreFields.Contains(name))
            {
                sqlCaluse.IgnoreFields.Add(name);
            }
            return(sqlCaluse);
        }
        protected override SqlCaluse GroupBy(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            string col = CustomHandle(exp, sqlCaluse, false);

            if (!sqlCaluse.GroupByFields.Contains(col))
            {
                sqlCaluse.GroupByFields.Add(col);
            }
            return(sqlCaluse);
        }
示例#15
0
 protected override SqlCaluse Insert(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Members.Count; i++)
     {
         var member = exp.Members[i];
         var name   = member.GetAttribute <ColumnNameAttribute>()?.Name ?? member.Name;
         sqlCaluse.SelectFields.Add(name);
         ExpressionVisit.Insert(exp.Arguments[i], sqlCaluse);
     }
     return(sqlCaluse);
 }
        protected override SqlCaluse Join(BinaryExpression exp, SqlCaluse sqlCaluse)
        {
            sqlCaluse += " ON ";
            ExpressionVisit.Join(exp.Left, sqlCaluse);
            var insertIndex = sqlCaluse.Length;

            ExpressionVisit.Join(exp.Right, sqlCaluse);
            OperatorParser(exp.NodeType, insertIndex, sqlCaluse.Sql, false);

            return(sqlCaluse);
        }
        protected override SqlCaluse Select(MethodCallExpression exp, SqlCaluse sqlCaluse)
        {
            var key = exp.Method.Name;

            if (methodDic.ContainsKey(key))
            {
                var func = methodDic[key];
                func.Invoke(exp, sqlCaluse);
            }
            return(sqlCaluse);
        }
        protected override SqlCaluse SelectMethod(BinaryExpression exp, SqlCaluse sqlCaluse)
        {
            ExpressionVisit.SelectMethod(exp.Left, sqlCaluse);
            var insertIndex = sqlCaluse.SelectMethod.Length;

            ExpressionVisit.SelectMethod(exp.Right, sqlCaluse);
            var endIndex = sqlCaluse.SelectMethod.Length;
            var b        = endIndex - insertIndex == 5 && sqlCaluse.SelectMethod.ToString().EndsWith("null");

            OperatorParser(exp.NodeType, insertIndex, sqlCaluse.SelectMethod, b, false);
            return(sqlCaluse);
        }
        protected override SqlCaluse Where(BinaryExpression exp, SqlCaluse sqlCaluse)
        {
            ExpressionVisit.Where(exp.Left, sqlCaluse);
            var insertIndex = sqlCaluse.Length;

            ExpressionVisit.Where(exp.Right, sqlCaluse);
            var endIndex = sqlCaluse.Length;
            var b        = endIndex - insertIndex == 5 && sqlCaluse.EndWith("null");

            OperatorParser(exp.NodeType, insertIndex, sqlCaluse.Sql, b);
            return(sqlCaluse);
        }
示例#20
0
 protected override SqlCaluse PrimaryKey(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Members.Count; i++)
     {
         var name = exp.Members[i].Name;
         if (!sqlCaluse.IgnoreFields.Contains(name))
         {
             sqlCaluse.IgnoreFields.Add(name);
         }
     }
     return(sqlCaluse);
 }
        //protected override SqlCaluse Where(NewArrayExpression exp, SqlCaluse sqlCaluse) {
        //    sqlCaluse += "(";
        //    foreach (var item in exp.Expressions) {
        //        ExpressionVisit.In(item, sqlCaluse);
        //        sqlCaluse += ",";
        //    }
        //    sqlCaluse -= ",";
        //    sqlCaluse += ")";
        //    return sqlCaluse;
        //}

        protected override SqlCaluse In(NewArrayExpression exp, SqlCaluse sqlCaluse)
        {
            //sqlCaluse += "(";
            foreach (var item in exp.Expressions)
            {
                ExpressionVisit.In(item, sqlCaluse);
                sqlCaluse += ",";
            }
            sqlCaluse -= ",";
            //sqlCaluse += ")";
            return(sqlCaluse);
        }
 private static SqlCaluse SelectGroupConcat(MethodCallExpression exp, SqlCaluse sqlCaluse)
 {
     if (sqlCaluse.DbType == 2)
     {
         var a = exp.Arguments[0];
         ExpressionVisit.SelectMethod(a, sqlCaluse);
         AddColumn(sqlCaluse, "\n GROUP_CONCAT({0}) ");
     }
     else
     {
         throw new Exception("GroupConcat 只支持 MySql");
     }
     return(sqlCaluse);
 }
示例#23
0
 protected override SqlCaluse Select(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Arguments.Count; i++)
     {
         var argExp = exp.Arguments[i];
         if (sqlCaluse.GetMemberName == null)
         {
             sqlCaluse.GetMemberName = () => {
                 return(exp.Members[i].Name);
             }
         }
         ;
         ExpressionVisit.Select(argExp, sqlCaluse);
     }
     return(sqlCaluse);
 }
        protected override SqlCaluse In(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            var v = Expression.Lambda(exp).Compile().DynamicInvoke();

            if (v.GetType() == typeof(string))
            {
                sqlCaluse += $"{v}";
            }
            else
            {
                IEnumerable array = v as IEnumerable;
                foreach (var item in array)
                {
                    sqlCaluse += $"'{item}', ";
                }
                sqlCaluse -= ", ";
            }
            return(sqlCaluse);
        }
示例#25
0
        protected override SqlCaluse Update(MemberInitExpression exp, SqlCaluse sqlCaluse)
        {
            var bindings = exp.Bindings;

            foreach (MemberBinding binding in bindings)
            {
                if (binding is MemberAssignment memberExp)
                {
                    var name  = binding.Member.GetAttribute <ColumnNameAttribute>()?.Name;
                    var value = Expression.Lambda(memberExp.Expression).Compile().DynamicInvoke();
                    sqlCaluse += $" {name ?? binding.Member.Name} = ";
                    sqlCaluse += sqlCaluse.AddDbParameter(value);
                    sqlCaluse += ",\n";
                }
            }
            if (sqlCaluse.EndWith(",\n"))
            {
                sqlCaluse.Sql.Remove(sqlCaluse.Sql.Length - 2, 2);
            }
            return(sqlCaluse);
        }
示例#26
0
 protected override SqlCaluse Update(NewExpression exp, SqlCaluse sqlCaluse)
 {
     for (int i = 0; i < exp.Members.Count; i++)
     {
         var member = exp.Members[i];
         var arg    = exp.Arguments[i];
         //var name = member.GetAttribute<ColumnNameAttribute>()?.Name ?? member.Name;
         var func  = Expression.Lambda(arg).Compile();
         var value = func.DynamicInvoke();
         if (value == null || value == DBNull.Value)
         {
             continue;
         }
         sqlCaluse += $" {member.Name} = ";
         sqlCaluse += sqlCaluse.AddDbParameter(value);
         sqlCaluse += ",\n";
     }
     if (sqlCaluse.EndWith(",\n"))
     {
         sqlCaluse.Sql.Remove(sqlCaluse.Sql.Length - 2, 2);
     }
     return(sqlCaluse);
 }
        private string FindValue(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            if (exp.Expression.NodeType == ExpressionType.Parameter)
            {
                string tableAlias = sqlCaluse.GetTableAlias(exp.Member.DeclaringType);

                var attr = exp.Member.GetAttribute <ColumnNameAttribute>();
                if (attr == null)
                {
                    return(" " + tableAlias + exp.Member.Name);
                }
                else
                {
                    return(" " + tableAlias + attr.Name);
                }
            }
            else
            {
                //var v = exp.Expression as ConstantExpression;
                var v = Expression.Lambda(exp).Compile().DynamicInvoke();
                return(sqlCaluse.AddDbParameter(v));
            }
        }
        protected override SqlCaluse Update(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            var e     = Expression.Lambda(exp).Compile().DynamicInvoke();
            var eType = e.GetType();
            var props = eType.GetProperties();

            for (int i = 0; i < props.Length; i++)
            {
                var p     = props[i];
                var value = p.GetValue(e, null);
                if (value == null || value == default || value == DBNull.Value)
                {
                    continue;
                }
                if (sqlCaluse.IgnoreFields.Contains(p.Name))
                {
                    continue;
                }
                if (p.GetAttribute <IgnoreAttribute>() != null)
                {
                    continue;
                }
                if (p.GetAttribute <PrimaryKeyAttribute>() != null)
                {
                    continue;
                }
                var name = p.GetAttribute <ColumnNameAttribute>()?.Name;
                sqlCaluse += $" {name ?? p.Name} = ";
                sqlCaluse += sqlCaluse.AddDbParameter(value);
                sqlCaluse += ",\n";
            }
            if (sqlCaluse.EndWith(",\n"))
            {
                sqlCaluse.Sql.Remove(sqlCaluse.Sql.Length - 2, 2);
            }
            return(sqlCaluse);
        }
        protected override SqlCaluse Insert(MemberExpression exp, SqlCaluse sqlCaluse)
        {
            var e     = Expression.Lambda(exp).Compile().DynamicInvoke();
            var eType = exp.Type;
            var props = eType.GetProperties();

            for (int i = 0; i < props.Length; i++)
            {
                var p = props[i];
                if (p.GetAttribute <IgnoreAttribute>() != null)
                {
                    continue;
                }
                var value = p.GetValue(e, null);
                if (value == null || value == DBNull.Value)
                {
                    continue;
                }
                var name = p.GetAttribute <ColumnNameAttribute>()?.Name;
                sqlCaluse.SelectFields.Add(name ?? p.Name);
                sqlCaluse.AddDbParameter(value);
            }
            return(sqlCaluse);
        }
        private string CustomHandle(MemberExpression exp, SqlCaluse sqlCaluse, bool aliaRequest = true)
        {
            var table = exp.Member.DeclaringType;

            sqlCaluse.SetTableAlias(table);
            var alias = sqlCaluse.GetTableAlias(table);
            var attr  = exp.Member.GetAttribute <ColumnNameAttribute>();

            if (attr != null)
            {
                if (aliaRequest)
                {
                    return($"{alias}{attr.Name} {exp.Member.Name}");
                }
                else
                {
                    return($"{alias}{attr.Name}");
                }
            }
            else
            {
                return($"{alias}{exp.Member.Name}");
            }
        }