From 9d2a67dd7ac6354a61d4c23d2ceb99f7ae4d4d58 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 19 Sep 2017 13:23:35 +0800 Subject: [PATCH] Subquery Bug --- Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs | 8 ++++++++ .../SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs | 2 +- .../SqlSugar/ExpressionsToSql/Subquery/SubTools.cs | 4 +++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs b/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs index 4bf37e5d4..7d1c4d65b 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/Query/SingleQuery.cs @@ -116,6 +116,14 @@ namespace OrmTest.UnitTest var t12 = db.Queryable().Where(it=>it.Id!=null).ToSql(); base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] WHERE ( [ID] IS NOT NULL )", null, t12.Key, t12.Value, "single t12 error"); + + var id = 1; + var t13 = db.Queryable().Where(it => SqlFunc.Subqueryable().Where(s => s.Id == it.Id&&s.Id==id).Max(s => s.Id) == 1).ToSql(); + base.Check("SELECT [ID],[SchoolId],[Name],[CreateTime] FROM [STudent] it WHERE ((SELECT MAX([Id]) FROM [School] WHERE (( [Id] = [it].[ID] ) AND ( [Id] = @Id0 ))) = @Const1 )", + new List() { + new SugarParameter("@Id0",1), + new SugarParameter("@Const1",1) + }, t13.Key, t13.Value, "single t13 error "); } } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs index 81046283a..3410ad4f0 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhere.cs @@ -35,7 +35,7 @@ namespace SqlSugar { var exp = expression as MethodCallExpression; var argExp= exp.Arguments[0]; - var result= "WHERE "+SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple); + var result= "WHERE "+SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple);; var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name)+UtilConstants.Dot; result = result.Replace(selfParameterName,string.Empty); return result; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs index 33571f7cb..f71318146 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs @@ -11,7 +11,7 @@ namespace SqlSugar public static List SubItems(ExpressionContext Context) { - return new List() + return new List() { new SubSelect() { Context=Context }, new SubWhere(){ Context=Context }, @@ -37,6 +37,8 @@ namespace SqlSugar newContext.Resolve(item, type); context.Index = newContext.Index; context.ParameterIndex = newContext.ParameterIndex; + if (newContext.Parameters.IsValuable()) + context.Parameters.AddRange(newContext.Parameters); return newContext.Result.GetResultString(); } }