diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index 6a4daf346..8ae83bb29 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -385,6 +385,8 @@ namespace OrmTest.Demo var test6 = db.Queryable().Where(it => SqlFunc.HasValue(it.Bool2)==true && SqlFunc.HasValue(it.Bool2)==true).ToList(); var test7 = db.Queryable().Where(it => SqlFunc.HasValue(it.Bool1) && SqlFunc.HasValue(it.Bool1)).ToList(); var test8 = db.Queryable().Where(it => SqlFunc.HasValue(it.SchoolId) && SqlFunc.HasValue(it.SchoolId)).ToList(); + bool? b = false; + var test9 = db.Queryable().Where(it => it.Bool1 == b).ToList(); } public static void Page() { diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs index f14a3f2dd..8cab100dc 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs @@ -82,7 +82,23 @@ namespace OrmTest.UnitTest var pars = expContext.Parameters; base.Check(value, pars, "( [Bool2] = @Bool20 )", new List() { new SugarParameter("@Bool20",false) - }, "whereSingle30"); + }, "whereSingle31"); + + whereSingle32(); + } + + + private void whereSingle32() + { + bool? b = false; + Expression> exp = it => it.Bool1 == b; + SqlServerExpressionContext expContext = new SqlServerExpressionContext(); + expContext.Resolve(exp, ResolveExpressType.WhereSingle); + var value = expContext.Result.GetString(); + var pars = expContext.Parameters; + base.Check(value, pars, "( [Bool1] = @Bool10 )", new List() { + new SugarParameter("@Bool10",false) + }, "whereSingle32"); } public string Get28(string a) { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index f4779919e..5d69baebd 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -36,6 +36,10 @@ namespace SqlSugar { leftExpression = (leftExpression as UnaryExpression).Operand; } + if (leftExpression is UnaryExpression && (leftExpression as UnaryExpression).Operand.Type == UtilConstants.BoolType && (leftExpression as UnaryExpression).NodeType != ExpressionType.Not&&rightExpression.Type==UtilConstants.BoolTypeNull) + { + leftExpression = (leftExpression as UnaryExpression).Operand; + } if (rightExpression is UnaryExpression&& (rightExpression as UnaryExpression).Operand.Type==UtilConstants.BoolType&& (rightExpression as UnaryExpression).NodeType != ExpressionType.Not) { rightExpression = (rightExpression as UnaryExpression).Operand; diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs index 0119b2a9d..b37082eac 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs @@ -19,6 +19,7 @@ namespace SqlSugar internal static Type LongType = typeof(long); internal static Type GuidType = typeof(Guid); internal static Type BoolType = typeof(bool); + internal static Type BoolTypeNull = typeof(bool?); internal static Type ByteType = typeof(Byte); internal static Type ObjType = typeof(object); internal static Type DobType = typeof(double);