/// <summary> /// 转到 select /// </summary> /// <param name="item"></param> /// <param name="alias"></param> /// <param name="result"></param> protected void ToSelect(Expression item, string alias, StringBuilder result) { var c = new ContentEasy(); ExplainTool.Explain(item, c); c.Rinse(); c.Info.ForEach(x => { var a = string.IsNullOrWhiteSpace(alias) ? "" : $" AS {alias}"; result.Append(string.IsNullOrWhiteSpace(x.Method) ? $"\r\n {GetTableName(x.Table)}.{x.Field}{a}," : $"\r\n {x.Method.ToUpper()}({GetTableName(x.Table)}.{x.Field}){a},"); }); }
/// <summary> /// 获取 order sql 代码 /// </summary> /// <returns></returns> protected StringBuilder GetOrder() { return(GetSliceSql(SqlTypeEnum.Order, () => { var result = new StringBuilder(); _orders.ForEach(item => { var c = new ContentEasy(); ExplainTool.Explain(item.Item1, c); c.Rinse(); foreach (var info in c.Info) { result.Append($"\r\n {GetTableName(info.Table)}.{info.Field} {item.Item2.ToExplain()},"); } }); if (result.Length > 0) { result.Insert(0, "\r\nORDER BY"); } return result.SafeRemove(result.Length - 1, 1); })); }
/// <summary> /// 获取 group sql 代码 /// </summary> /// <returns></returns> protected StringBuilder GetGroup() { return(GetSliceSql(SqlTypeEnum.Group, () => { var result = new StringBuilder(); _groups.ForEach(item => { var c = new ContentEasy(); ExplainTool.Explain(item, c); c.Rinse(); foreach (var info in c.Info) { result.Append($"\r\n {GetTableName(info.Table)}.{info.Field},"); } }); if (result.Length > 0) { result.Insert(0, "\r\nGROUP BY"); } return result.SafeRemove(result.Length - 1, 1); })); }
/// <summary> /// 转到 条件筛选 /// </summary> /// <param name="exps"></param> /// <param name="result"></param> protected void ToWhere(List <Expression> exps, StringBuilder result) { foreach (var item in exps) { var c = new ContentWhere(); ExplainTool.Explain(item, c); c.Rinse(); result.Append("\r\nAND("); c.Info.ForEach(x => { string param; var type = x.Type.ToExplain(); if (x.Value == null && (type == "=" || type == "<>")) { param = "null"; type = type == "=" ? "IS" : "IS NOT"; } else { param = $"@{GetTableName(x.Table)}_{x.Field}_{_params.Count}"; if (x.Value is MemberInfo member) { _params.Add(param, SwitchTime(member)); } else { _params.Add(param, x.Value); } } var ex = x.Prior.ToExplain(); var sql = $"\r\n {(ex == null ? "" : ex + " ")}{GetTableName(x.Table)}.{x.Field} "; if (ExplainTool.Methods.Contains(x.Method)) { if (x.Method == "Contains") { sql += $"LIKE '%'+{param}+'%'"; } else if (x.Method == "StartsWith") { sql += $"LIKE {param}+'%'"; } else if (x.Method == "EndsWith") { sql += $"LIKE '%'+{param}"; } else if (x.Method == "In") { sql += $"IN ({param})"; } else if (x.Method == "NotIn") { sql += $"NOT IN ({param})"; } } else { sql += $"{type} {param}"; } result.Append(sql); }); result.Append("\r\n)"); } }