From d522b8d805b3c1ad4693c8d63ae4cfd820a2f576 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 6 Jun 2025 18:42:57 +0800 Subject: [PATCH] Update exp to sql --- .../ConditionalExpressionResolve.cs | 39 ++++++++++++++++++- .../SqlSugar/SqlSugarForCore.nuspec | 2 +- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs index cb0670a57..dbbadeffb 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs @@ -17,6 +17,7 @@ namespace SqlSugar express.IfTrue, express.IfFalse }; + SetSingleTableNameSubqueryShortName(express); if (ExpressionTool.GetParameters(express.Test).Count == 0) { while (express != null) @@ -36,7 +37,7 @@ namespace SqlSugar // 如果选择的分支还是一个条件表达式,就继续展开 if (ExpressionTool.RemoveConvert(next) is ConditionalExpression childConditional) { - express = childConditional; + express = childConditional; args = new List() { express.Test, express.IfTrue, @@ -89,6 +90,42 @@ namespace SqlSugar } } + private void SetSingleTableNameSubqueryShortName(ConditionalExpression express) + { + if (this.Context.IsSingle && express.Test is MethodCallExpression callExpression) + { + var list = callExpression.Arguments.ToList(); + if (express.IfTrue is MethodCallExpression callExpressionLeft) + { + list.AddRange(callExpressionLeft.Arguments); + } + if (express.IfFalse is MethodCallExpression callExpressionRight) + { + list.AddRange(callExpressionRight.Arguments); + } + foreach (var item in list) + { + if (item is MethodCallExpression itemObj) + { + if (itemObj?.Object?.Type?.Name?.StartsWith("Subqueryable`") == true) + { + if (this.Context.SingleTableNameSubqueryShortName == null) + { + if (this.Context.SugarContext?.QueryBuilder?.SelectValue is LambdaExpression lambda) + { + if (lambda?.Parameters?.Count == 1) + { + this.Context.SingleTableNameSubqueryShortName = lambda.Parameters.FirstOrDefault()?.Name; + continue; + } + } + } + } + } + } + } + } + private static bool IsBoolMember(ConditionalExpression express) { return express.Test is MemberExpression && (express.Test as MemberExpression).Expression is ParameterExpression; diff --git a/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec b/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec index 363d94bbf..beb6f6f87 100644 --- a/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec +++ b/Src/Asp.NetCore2/SqlSugar/SqlSugarForCore.nuspec @@ -2,7 +2,7 @@ SqlSugarCore - 5.1.4.196-preview07 + 5.1.4.196-preview09 sunkaixuan 果糖大数据科技 http://www.apache.org/licenses/LICENSE-2.0.html