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);