/// <summary> /// 翻译查询 /// </summary> /// <param name="obj"></param> /// <param name="query"></param> /// <param name="queryCompiler"></param> public virtual void TranslateQuery(OrmObjectInfo obj, QueryInfo query, QueryCompilerInfo queryCompiler) { var table = new TableInfo { Joins = new Dictionary <string, JoinInfo>() }; var selectComplier = new QueryCompilerInfo(obj, query.SelectExp, table, null) { Query = query, TranslateQuery = TranslateQuery }; var groupbyComplier = new QueryCompilerInfo(obj, query.GroupByExp, table, null) { Query = query }; var orderbyComplier = new QueryCompilerInfo(obj, query.OrderByExp, table, null) { Query = query }; var whereComplier = new WhereCompilerInfo(obj, query.WhereExp, table, null) { Query = query }; var havingComplier = new WhereCompilerInfo(obj, query.HavingExp, table, null) { Query = query }; SelectCompiler.Translate(selectComplier); WhereCompiler.Translate(whereComplier); GroupbyCompiler.Translate(groupbyComplier); HavingCompiler.Translate(havingComplier); OrderbyCompiler.Translate(orderbyComplier); if (queryCompiler != null && !string.IsNullOrEmpty(queryCompiler.Chainon)) { if (whereComplier.Builder.Length > 0) { whereComplier.Builder.Append(" and "); } whereComplier.Builder.Append(string.Format(queryCompiler.Chainon, table.AsName)); } var tableSql = selectComplier.GetJoinTable(query); query.Sql = GetSql(obj, selectComplier, tableSql, whereComplier, groupbyComplier, orderbyComplier, havingComplier, query); }
/// <summary> /// 拼接自定义条件 /// </summary> /// <param name="saveCompile"></param> /// <param name="where"></param> protected virtual void AppendCustomerWhere(SaveCompilerInfo saveCompile, StringBuilder where) { var whereCompile = new WhereCompilerInfo(saveCompile.SaveInfo.Object, saveCompile.SaveInfo.Information.WhereExp, new TableInfo { Joins = new Dictionary <string, JoinInfo>() }, new StringBuilder(), true, saveCompile) { Query = new QueryInfo { Object = saveCompile.SaveInfo.Object, Parameters = saveCompile.SaveInfo.Information.Parameters } }; WhereCompiler.Translate(whereCompile); if (whereCompile.Query.SqlParameters != null) { foreach (var sqlParameter in whereCompile.Query.SqlParameters) { AddParamter(saveCompile.Command, sqlParameter.Key, sqlParameter.Value); } } where.Append(whereCompile.Builder); saveCompile.IsSaveParameters = true; }