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); }
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); }
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); }
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); }
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); }
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); }
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}"); } }