From c51cffc2c2c5eadf067a2ddf8df8497f1631a29c Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 19 Aug 2022 16:50:27 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20Lambda=20bool=20?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=EF=BC=9B#1219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 11 ----------- .../FreeSql.Tests/Internal/CommonExpressionTest.cs | 6 +++++- FreeSql/Internal/CommonExpression.cs | 11 ++++++++++- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 6ca84f12..537315e2 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -802,14 +802,3 @@ -Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])"> - - 批量注入 Repository,可以参考代码自行调整 - - - - - - - - diff --git a/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs b/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs index ed5e360f..dae1c1bd 100644 --- a/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs @@ -127,7 +127,11 @@ WHERE (a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0)", sql); sql = fsql.Select().Where(a => a.Bool && a.Id > 0 && a.Bool).ToSql(); Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable"" FROM ""IIFTest01Model"" a -WHERE (a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1)", sql); +WHERE (a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1)", sql); + sql = fsql.Select().Where(a => a.Bool && a.Id > 0 || a.Bool).ToSql(); + Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable"" +FROM ""IIFTest01Model"" a +WHERE ((a.""Bool"" = 1 AND a.""Id"" > 0 OR a.""Bool"" = 1))", sql); sql = fsql.Select().Where(a => a.BoolNullable == true && a.Id > 0 && a.BoolNullable == true).ToSql(); Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable"" diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index e6bd5c7b..37e46e3e 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -754,7 +754,16 @@ namespace FreeSql.Internal return ExpressionLambdaToSql(Expression.Call(leftExp, MethodDateTimeSubtractTimeSpan, rightExp), tsc); } if (oper == "OR") - return $"({GetBoolString(ExpressionLambdaToSql(leftExp, tsc))} {oper} {GetBoolString(ExpressionLambdaToSql(rightExp, tsc))})"; + { + var leftBool = ExpressionLambdaToSql(leftExp, tsc); + if (SearchColumnByField(tsc._tables, tsc.currentTable, leftBool) != null) leftBool = $"{leftBool} = {formatSql(true, null, null, null)}"; + else leftBool = GetBoolString(leftBool); + + var rightBool = ExpressionLambdaToSql(rightExp, tsc); + if (SearchColumnByField(tsc._tables, tsc.currentTable, rightBool) != null) rightBool = $"{rightBool} = {formatSql(true, null, null, null)}"; + else rightBool = GetBoolString(rightBool); + return $"({leftBool} {oper} {rightBool})"; + } return $"({ExpressionLambdaToSql(leftExp, tsc)} {oper} {ExpressionLambdaToSql(rightExp, tsc)})"; case "=": case "<>":