From 43e7bdce9cd9537c7bf0c8ba53609d47194081fc Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 4 Jan 2022 16:45:17 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20=E5=AD=90=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=20WhereIf=20=E5=8F=AF=E8=83=BD=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sqlite/Curd/SqliteSelectTest.cs | 12 +++++++ FreeSql/Internal/CommonExpression.cs | 35 +++++++++++-------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs index ca88f326..2d5ec8a6 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs @@ -689,6 +689,18 @@ namespace FreeSql.Tests.Sqlite .Any() ).Any() ).ToList(); + + sql2222 = select.Where(a => + select.Where(b => b.Id == a.Id && + select + .Where(c => c.Id == b.Id) + .Where(d => d.Id == a.Id) + .Where(e => e.Id == b.Id) + .WhereIf(!sql2222.Any(), e => e.Id > 0) + .WhereIf(sql2222.Any(), e => e.Id >= 0) + .Any() + ).Any() + ).ToList(); } [Fact] public void GroupBy() diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 305dd76f..d74352e0 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1066,25 +1066,32 @@ namespace FreeSql.Internal else { var argExp = (arg3Exp as UnaryExpression)?.Operand; - if (argExp != null && argExp.NodeType == ExpressionType.Lambda) + if (argExp != null) { - if (fsqltable1SetAlias == false) + if (argExp.NodeType == ExpressionType.Lambda) { - fsqltable1SetAlias = true; - var argExpLambda = argExp as LambdaExpression; - var fsqlTypeGenericArgs = fsqlType.GetGenericArguments(); + if (fsqltable1SetAlias == false) + { + fsqltable1SetAlias = true; + var argExpLambda = argExp as LambdaExpression; + var fsqlTypeGenericArgs = fsqlType.GetGenericArguments(); - if (argExpLambda.Parameters.Count == 1 && argExpLambda.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) - { - for (var gai = 0; gai < fsqlTypeGenericArgs.Length; gai++) - fsqltables[gai].Alias = "ht" + (gai + 1); - } - else - { - for (var gai = 0; gai < fsqlTypeGenericArgs.Length && gai < argExpLambda.Parameters.Count; gai++) - fsqltables[gai].Alias = argExpLambda.Parameters[gai].Name; + if (argExpLambda.Parameters.Count == 1 && argExpLambda.Parameters[0].Type.FullName.StartsWith("FreeSql.Internal.Model.HzyTuple`")) + { + for (var gai = 0; gai < fsqlTypeGenericArgs.Length; gai++) + fsqltables[gai].Alias = "ht" + (gai + 1); + } + else + { + for (var gai = 0; gai < fsqlTypeGenericArgs.Length && gai < argExpLambda.Parameters.Count; gai++) + fsqltables[gai].Alias = argExpLambda.Parameters[gai].Name; + } } } + else + { + argExp = null; + } } args[a] = argExp ?? Expression.Lambda(arg3Exp).Compile().DynamicInvoke(); //if (args[a] == null) ExpressionLambdaToSql(call3Exp.Arguments[a], fsqltables, null, null, SelectTableInfoType.From, true);