From b7eba4967ad9f6fa9df9e0bb96ab0fd67b0a0ea6 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 17 May 2023 20:21:01 +0800 Subject: [PATCH] Synchronization code --- .../QueryableProvider/QueryableHelper.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index b37625182..efb7547cd 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -1275,6 +1275,26 @@ namespace SqlSugar return sql; } + private string AppendSelectWithSubQuery(List entityColumnInfos, string sql, ReadOnlyCollection parameters, List columnsResult, int parameterIndex1,string parameterName) + { + var list = ExpressionTool.GetMemberInit(this.QueryBuilder.SelectValue).Bindings.Cast() + .Select(it => it.Member.Name).ToList(); + var columns = entityColumnInfos; + //var parameterName = parameters[parameterIndex1]; + if (this.QueryBuilder.AutoAppendedColumns == null) + { + this.QueryBuilder.AutoAppendedColumns = new List(); + } + foreach (var item in columns) + { + if (item.IsIgnore == false && !this.QueryBuilder.AutoAppendedColumns.Contains(item.PropertyName) && columnsResult.Any(it => it.PropertyName.EqualCase(item.PropertyName)) && !list.Any(it => it.EqualCase(item.PropertyName))) + { + sql = $" {sql},{SqlBuilder.GetTranslationColumnName(parameterName)}.{SqlBuilder.GetTranslationColumnName(item.DbColumnName)} AS {SqlBuilder.GetTranslationColumnName(item.PropertyName)} "; + this.QueryBuilder.AutoAppendedColumns.Add(item.PropertyName); + } + } + return sql; + } private string AppendSelectWithSubQuery(List entityColumnInfos, string sql, ReadOnlyCollection parameters, List columnsResult, int parameterIndex1) { @@ -1300,6 +1320,12 @@ namespace SqlSugar protected string AppendSelect(string sql, ReadOnlyCollection parameters, List columnsResult, int parameterIndex1) { var columns = this.Context.EntityMaintenance.GetEntityInfo().Columns; + var lowerSql = sql.ToLower(); + var isSubquery = lowerSql.Contains("select ") && ExpressionTool.IsMemberInit(this.QueryBuilder.SelectValue); + if (isSubquery) + { + return AppendSelectWithSubQuery(columns, sql, parameters, columnsResult, parameterIndex1, parameters[parameterIndex1].Name); + } var parameterName = parameters[parameterIndex1].Name; if (parameterName.HasValue()) {