From 4186e0820eda86a678cc4ff2cb69df1fd88e4ff1 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 23 Apr 2022 12:12:14 +0800 Subject: [PATCH] Update query in query select subquery bug --- Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs | 5 +++++ .../Abstract/QueryableProvider/QueryableProvider.cs | 1 + .../Abstract/SqlBuilderProvider/QueryBuilder.cs | 13 +++++++++++++ Src/Asp.Net/SqlSugar/SqlSugarClient.cs | 1 + 4 files changed, 20 insertions(+) diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs index a8f88378f..6786b3a02 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs @@ -142,6 +142,11 @@ namespace OrmTest { it.UnitA002 = db.Queryable().SetContext(x => x.orgid, () => it.id, it).First(); }); + db.Queryable(db.Queryable()) + .Select(it => new + { + x = SqlFunc.Subqueryable().Where(z => z.Id == it.Id).Any() + }).ToList(); } public class UnitA001 diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index f1f656065..78c7d7fc1 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -2943,6 +2943,7 @@ namespace SqlSugar _Size=it._Size }).ToList(); } + asyncQueryableBuilder.IsQueryInQuery = this.QueryBuilder.IsQueryInQuery; asyncQueryableBuilder.Includes = this.QueryBuilder.Includes; asyncQueryableBuilder.Take = this.QueryBuilder.Take; asyncQueryableBuilder.Skip = this.QueryBuilder.Skip; diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 268356643..89f2628c1 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -33,6 +33,7 @@ namespace SqlSugar #endregion #region Splicing basic + public bool IsQueryInQuery { get; set; } public List Includes { get; set; } public List IgnoreColumns { get; set; } public bool IsCount { get; set; } @@ -641,6 +642,18 @@ namespace SqlSugar if (this.AsTables.Any(it=>it.Key==EntityName)) { name = this.AsTables.FirstOrDefault(it => it.Key == EntityName).Value; + if (this.IsQueryInQuery && this.SelectValue != null && this.SelectValue is Expression) + { + if (this.SelectValue.ToString().Contains("Subqueryable()")&& name.TrimStart().StartsWith("(")) + { + var oldName = name; + name = Regex.Match(name, @"\(.+\)").Value; + if (name.IsNullOrEmpty()) + { + name = oldName; + } + } + } } var result = Builder.GetTranslationTableName(name); result += UtilConstants.Space; diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index c4cca3c45..b0e3b1371 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -346,6 +346,7 @@ namespace SqlSugar var result= this.Context.Queryable(queryable); var QueryBuilder = queryable.QueryBuilder; + result.QueryBuilder.IsQueryInQuery = true; result.QueryBuilder.WhereIndex = QueryBuilder.WhereIndex++; result.QueryBuilder.LambdaExpressions.ParameterIndex = QueryBuilder.LambdaExpressions.ParameterIndex++; result.QueryBuilder.LambdaExpressions.Index = QueryBuilder.LambdaExpressions.Index++;