diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs index 5569f6ddb..44f567c85 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++) { + whereSingle17(); whereSingle16(); whereSingle15(); whereSingle1(); @@ -280,6 +281,19 @@ namespace OrmTest.UnitTest new SugarParameter("@Const0",dic["key"]) }, "whereSingle16"); } + + private void whereSingle17() + { + Expression> exp = it =>true&&it.String.Contains("a"); + SqlServerExpressionContext expContext = new SqlServerExpressionContext(); + expContext.Resolve(exp, ResolveExpressType.WhereSingle); + var value = expContext.Result.GetString(); + var pars = expContext.Parameters; + base.Check(value, pars, "(( 1 = 1 ) AND ([String] like '%'+@MethodConst1+'%') )", new List() + { + new SugarParameter("@MethodConst1","a") + }, "whereSingle17"); + } } public class WhereConst diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs index cb9fb56b8..1bda1f732 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs @@ -38,10 +38,18 @@ namespace SqlSugar this.Context.Result.Append(value.ObjToBool() ? "( 1 = 1 ) " : "( 1 = 2 ) "); break; } - if (parentIsBinary && value != null && value.GetType() == PubConst.BoolType && parameter.OppsiteExpression is BinaryExpression) + if (parentIsBinary && value != null && value.GetType() == PubConst.BoolType && parameter.BaseExpression != null) { - AppendMember(parameter,isLeft,(value.ObjToBool() ? "( 1 = 1 ) " : "( 1 = 2 ) ")); - break; + var isLogicOperator = + parameter.BaseExpression.NodeType == ExpressionType.And || + parameter.BaseExpression.NodeType == ExpressionType.AndAlso || + parameter.BaseExpression.NodeType == ExpressionType.Or || + parameter.BaseExpression.NodeType == ExpressionType.OrElse; + if (isLogicOperator) + { + AppendMember(parameter, isLeft, (value.ObjToBool() ? "( 1 = 1 ) " : "( 1 = 2 ) ")); + break; + } } if (value == null && parentIsBinary) {