From 27120aaf51df38f5c264ecedfcc1821950d290d6 Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Sat, 19 Jun 2021 12:00:24 +0800 Subject: [PATCH] Subquery join bug --- .../ExpressionsToSql/Subquery/Items/SubInnerJoin.cs | 2 +- .../SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs | 2 +- .../SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs | 5 ++++- .../SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs | 6 ++++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs index 02b7d26a1..d78cc4d04 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs @@ -50,7 +50,7 @@ namespace SqlSugar var joinString =string.Format(" {2} INNER JOIN {1} {0} ", this.Context.GetTranslationColumnName(parameter.Name), tableName, - this.Context.JoinIndex==0?name:""); + this.Context.JoinIndex==1?name:""); var result = joinString+ "ON " + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple); //var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot; this.Context.JoinIndex++; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs index 5bc58bf4f..f46e25194 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs @@ -50,7 +50,7 @@ namespace SqlSugar var joinString =string.Format(" {2} LEFT JOIN {1} {0} ", this.Context.GetTranslationColumnName(parameter.Name), tableName, - this.Context.JoinIndex==0?name:""); + this.Context.JoinIndex==1?name:""); var result = joinString+ "ON " + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple); //var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot; this.Context.JoinIndex++; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs index d2b853feb..11869c486 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubSelect.cs @@ -49,7 +49,10 @@ namespace SqlSugar this.Context.InitMappingInfo(entityType); this.Context.RefreshMapping(); } - return SubTools.GetMethodValue(this.Context, exp.Arguments[0],ResolveExpressType.FieldSingle); + if(this.Context.JoinIndex==0) + return SubTools.GetMethodValue(this.Context, exp.Arguments[0],ResolveExpressType.FieldSingle); + else + return SubTools.GetMethodValue(this.Context, exp.Arguments[0], ResolveExpressType.FieldMultiple); } } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs index dac6cbb0e..3807b861c 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs @@ -135,11 +135,17 @@ namespace SqlSugar } isubList = isubList.OrderBy(it => it.Sort).ToList(); var isHasWhere = isubList.Where(it => it is SubWhere).Any(); + var isJoin = isubList.Any(it => it is SubInnerJoin || it is SubLeftJoin); + if (isJoin) + { + this.context.JoinIndex++; + } List result = isubList.Select(it => { it.HasWhere = isHasWhere; return it.GetValue(it.Expression); }).ToList(); + this.context.JoinIndex = 0; return result; } }