diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs index 44f567c85..e70d21e29 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs @@ -21,6 +21,7 @@ namespace OrmTest.UnitTest base.Begin(); for (int i = 0; i < base.Count; i++) { + whereSingle18(); whereSingle17(); whereSingle16(); whereSingle15(); @@ -294,6 +295,19 @@ namespace OrmTest.UnitTest new SugarParameter("@MethodConst1","a") }, "whereSingle17"); } + + private void whereSingle18() + { + Expression> exp = it => !it.Bool1; + SqlServerExpressionContext expContext = new SqlServerExpressionContext(); + expContext.Resolve(exp, ResolveExpressType.WhereSingle); + var value = expContext.Result.GetString(); + var pars = expContext.Parameters; + base.Check(value, pars, "NOT ( [Bool1]=1 ) ", new List() + { + + }, "whereSingle18"); + } } public class WhereConst diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index b0c436ad4..74098b19a 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -46,7 +46,17 @@ namespace SqlSugar return null; } } - + public static bool IsLogicOperator(string operatorValue) + { + return operatorValue=="&&"|| operatorValue=="||"; + } + public static bool IsComparisonOperator(BinaryExpression expression) + { + return expression.NodeType != ExpressionType.And && + expression.NodeType != ExpressionType.AndAlso && + expression.NodeType != ExpressionType.Or && + expression.NodeType != ExpressionType.OrElse; + } public static object GetMemberValue(MemberInfo member, Expression expression) { var memberInfos = new Stack(); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index 4c1fcacf5..517ba04ff 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -18,13 +18,9 @@ namespace SqlSugar else { var expression = this.Expression as BinaryExpression; - var operatorValue =parameter.OperatorValue=ExpressionTool.GetOperator(expression.NodeType); - var isEqual = expression.NodeType==ExpressionType.Equal; - var isComparisonOperator = - expression.NodeType != ExpressionType.And && - expression.NodeType != ExpressionType.AndAlso && - expression.NodeType != ExpressionType.Or && - expression.NodeType != ExpressionType.OrElse; + var operatorValue = parameter.OperatorValue = ExpressionTool.GetOperator(expression.NodeType); + var isEqual = expression.NodeType == ExpressionType.Equal; + var isComparisonOperator =ExpressionTool.IsComparisonOperator(expression); base.ExactExpression = expression; var leftExpression = expression.Left; var rightExpression = expression.Right; @@ -40,8 +36,9 @@ namespace SqlSugar base.Context.Result.Append(ExpressionConst.Format3); base.Context.Result.Append(ExpressionConst.Format0); } - else { - base.Context.Result.Replace(ExpressionConst.Format0,ExpressionConst.Format3+ ExpressionConst.Format0); + else + { + base.Context.Result.Replace(ExpressionConst.Format0, ExpressionConst.Format3 + ExpressionConst.Format0); } parameter.LeftExpression = leftExpression; parameter.RightExpression = rightExpression; @@ -54,16 +51,17 @@ namespace SqlSugar base.IsLeft = null; if (lsbs && parameter.ValueIsNull) { - base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, isEqual?"IS":"IS NOT"); + base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, isEqual ? "IS" : "IS NOT"); } - else { + else + { base.Context.Result.Replace(ExpressionConst.Format1 + parameter.Index, operatorValue); - base.Context.Result.Replace(ExpressionConst.Format1 +(parameter.Index+1), operatorValue); + base.Context.Result.Replace(ExpressionConst.Format1 + (parameter.Index + 1), operatorValue); } base.Context.Result.Append(ExpressionConst.Format4); if (parameter.BaseExpression is BinaryExpression && parameter.IsLeft == true) { - base.Context.Result.Append(" "+ExpressionConst.Format1 + parameter.BaseParameter.Index+" "); + base.Context.Result.Append(" " + ExpressionConst.Format1 + parameter.BaseParameter.Index + " "); } } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index f620b8c27..6a0cbc297 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -61,8 +61,11 @@ namespace SqlSugar else { fieldName = getSingleName(parameter, expression, isLeft); + if (expression.Type == PubConst.BoolType&&baseParameter.OperatorValue.IsNullOrEmpty()) { + fieldName= "( "+fieldName+"=1 )"; + } fieldName = AppendMember(parameter, isLeft, fieldName); - } + } break; case ResolveExpressType.WhereMultiple: if (isSetTempData) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs index f1244092f..39535e8ed 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs @@ -32,7 +32,20 @@ namespace SqlSugar { Append(parameter, nodeType); } - else if (isMember || isConst) + else if (isMember) + { + var isComparisonOperator = ExpressionTool.IsLogicOperator(baseParameter.OperatorValue)||baseParameter.OperatorValue.IsNullOrEmpty(); + var memberExpression = (base.Expression as MemberExpression); + if (memberExpression.Type== PubConst.BoolType&& isComparisonOperator) + { + Append(parameter, nodeType); + } + else + { + Result(parameter, nodeType); + } + } + else if (isConst) { Result(parameter, nodeType); }