From 6eb2819705c34dd7e128d89c366658470154a196 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 17 Sep 2022 15:38:17 +0800 Subject: [PATCH] Update exp to sql --- .../QueryableProvider/QueryableProvider.cs | 25 +++++++++++++++++++ .../ExpressionsToSql/Common/ExpressionTool.cs | 8 ++++++ .../ResolveItems/BaseResolve.cs | 10 ++++++++ .../Json2Sql/Queryable/QueryableProvider.cs | 8 ++++++ 4 files changed, 51 insertions(+) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 4eaf5d379..f59f734d1 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -211,6 +211,7 @@ namespace SqlSugar } public ISugarQueryable Filter(Type type) { + this.Context.InitMappingInfo(type); var whereString= QueryBuilder.GetFilters(type); if (whereString.HasValue()) { @@ -1059,6 +1060,30 @@ namespace SqlSugar else { var selects = this.QueryBuilder.GetSelectValueByString(); + if (selects.ObjToString().ToLower().IsContainsIn(".","("," as ")) + { + return this.Select(selects); + } + var resultColumns=this.Context.EntityMaintenance.GetEntityInfo().Columns; + var dbColumns = this.EntityInfo.Columns.Where(it=>!it.IsIgnore); + StringBuilder sb = new StringBuilder(); + foreach (var item in resultColumns) + { + var firstColumn= dbColumns.FirstOrDefault(z => + z.PropertyName.EqualCase(item.PropertyName) || + z.DbColumnName.EqualCase(item.PropertyName)); + if (firstColumn != null) + { + var dbColumnName = firstColumn.DbColumnName; + var AsName = item.PropertyName; + sb.Append($"{this.SqlBuilder.GetTranslationColumnName(dbColumnName)} AS {AsName} ,"); + } + } + selects = sb.ToString().TrimEnd(','); + if (selects == "") + { + selects = "*"; + } return this.Select(selects); } } diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index 5609acb2c..c8b806cd4 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -130,6 +130,14 @@ namespace SqlSugar return newExp; } + public static string GetMethodName(Expression expression) + { + if (expression is MethodCallExpression) + { + return (expression as MethodCallExpression).Method.Name; + } + return null; + } public static Type GetMemberInfoType(MemberInfo member) { diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index a0a425270..a5638d9da 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -530,6 +530,11 @@ namespace SqlSugar } } } + else if (IsExtSqlFuncObj(item)) + { + var value = GetNewExpressionValue(item); + parameter.Context.Result.Append($" {value} AS {asName} "); + } else { asName = GetAsNameResolveAnObject(parameter, item, asName, isSameType); @@ -744,6 +749,11 @@ namespace SqlSugar #endregion #region Validate + + private bool IsExtSqlFuncObj(Expression item) + { + return this.Context.SqlFuncServices != null && item is MethodCallExpression && this.Context.SqlFuncServices.Any(it => it.UniqueMethodName == ExpressionTool.GetMethodName(item)); + } private bool IsNullValue(ExpressionParameter parameter, object value) { return value == null diff --git a/Src/Asp.NetCore2/SqlSugar/Json2Sql/Queryable/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Json2Sql/Queryable/QueryableProvider.cs index 3ed7da1d8..be8d3f44f 100644 --- a/Src/Asp.NetCore2/SqlSugar/Json2Sql/Queryable/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Json2Sql/Queryable/QueryableProvider.cs @@ -30,6 +30,10 @@ namespace SqlSugar } public ISugarQueryable OrderBy(List models) { + if (models == null || models.Count == 0) + { + return this; + } var orderObj = this.SqlBuilder.OrderByModelToSql(models); this.OrderBy(orderObj.Key); this.QueryBuilder.Parameters.AddRange(orderObj.Value); @@ -37,6 +41,10 @@ namespace SqlSugar } public ISugarQueryable GroupBy(List models) { + if (models == null || models.Count == 0) + { + return this; + } var orderObj = this.SqlBuilder.GroupByModelToSql(models); this.GroupBy(orderObj.Key); this.QueryBuilder.Parameters.AddRange(orderObj.Value);