internal static StringBuilder GetQueryableSql <T>(Queryable <T> queryable) { string joinInfo = string.Join(" ", queryable.JoinTableValue); StringBuilder sbSql = new StringBuilder(); string tableName = queryable.TableName.IsNullOrEmpty() ? queryable.TName : queryable.TableName; if (queryable.DB.Language.IsValuable() && queryable.DB.Language.Suffix.IsValuable()) { var viewNameList = LanguageHelper.GetLanguageViewNameList(queryable.DB); var isLanView = viewNameList.IsValuable() && viewNameList.Any(it => it == tableName); if (!queryable.DB.Language.Suffix.StartsWith(LanguageHelper.PreSuffix)) { queryable.DB.Language.Suffix = LanguageHelper.PreSuffix + queryable.DB.Language.Suffix; } //将视图变更为多语言的视图 if (isLanView) { tableName = typeof(T).Name + queryable.DB.Language.Suffix; } } if (queryable.DB.PageModel == PageModel.RowNumber) { string withNoLock = queryable.DB.IsNoLock ? "WITH(NOLOCK)" : null; var order = queryable.OrderByValue.IsValuable() ? ("ORDER BY " + queryable.OrderByValue + " ") : null; sbSql.AppendFormat("SELECT " + queryable.SelectValue.GetSelectFiles() + " {1} FROM {0} {5} {2} WHERE 1=1 {3} {4} ", tableName.GetTranslationSqlName(), "", withNoLock, string.Join("", queryable.WhereValue), queryable.GroupByValue.GetGroupBy(), joinInfo); sbSql.Append(order); if (queryable.Skip > 0 || queryable.Take > 0) { if (queryable.Skip > 0 && queryable.Take > 0) { sbSql.AppendFormat("limit {0},{1}", queryable.Skip, queryable.Take); } else if (queryable.Skip > 0) { sbSql.AppendFormat("limit {0}", queryable.Skip); } else if (queryable.Take > 0) { sbSql.AppendFormat("limit 0,{0}", queryable.Take); } } } return(sbSql); }
/// <summary> /// 单表情况 /// </summary> /// <typeparam name="TResult">实体类型</typeparam> /// <param name="reval">查旬对象</param> /// <param name="exp"></param> internal static void GetResult <TResult>(Queryable <TResult> reval, Expression exp) { string expStr = reval.SelectValue; var isComplexAnalysis = IsComplexAnalysis(expStr); expStr = Regex.Match(expStr, @"(?<=\{).*?(?=\})").Value; if (expStr.IsNullOrEmpty()) { expStr = Regex.Match(reval.SelectValue, @"c =>.*?\((.+)\)").Groups[1].Value; } var hasOutPar = expStr.Contains(SqlSugarTool.ParSymbol); if (hasOutPar)//有 { var ms = Regex.Matches(expStr, @"""(\" + SqlSugarTool.ParSymbol + @"[a-z,A-Z]+)?""\.ObjTo[a-z,A-Z]+?\(\)").Cast <Match>().ToList(); foreach (var m in ms) { expStr = expStr.Replace(m.Groups[0].Value, m.Groups[1].Value); } } expStr = Regex.Replace(expStr, @"(?<=\=)[^\,]*?\.", ""); if (reval.SelectValue.IsNullOrEmpty()) { throw new SqlSugarException("Select 解析失败 ", new { selectString = reval.SelectValue }); } expStr = expStr.Replace("\"", "'"); expStr = expStr.Replace("DateTime.Now", "now()"); expStr = ConvertFuns(expStr); reval.SelectValue = expStr; if (reval.DB != null && reval.DB.IsEnableAttributeMapping && reval.DB._mappingColumns.IsValuable()) { foreach (var item in reval.DB._mappingColumns) { reval.SelectValue = Regex.Replace(reval.SelectValue, @"\=" + item.Key, "=" + item.Value); } } reval.SelectValue = ConvertSelectValue(reval.SelectValue); }