diff --git a/SqlServerTest/UnitTest/ExpressionTest/Method.cs b/SqlServerTest/UnitTest/ExpressionTest/Method.cs index 5f199c61c..05c24cf2c 100644 --- a/SqlServerTest/UnitTest/ExpressionTest/Method.cs +++ b/SqlServerTest/UnitTest/ExpressionTest/Method.cs @@ -26,6 +26,7 @@ namespace OrmTest.UnitTest StringIsNullOrEmpty2(); StringIsNullOrEmpty3(); StringIsNullOrEmpty4(); + StringIsNullOrEmpty5(); #endregion ToUpper(); ToLower(); @@ -448,7 +449,19 @@ namespace OrmTest.UnitTest new SugarParameter("@MethodConst1","xx"), new SugarParameter("@Id0",2) }, "StringIsNullOrEmpty4 error"); - } + } + private void StringIsNullOrEmpty5() + { + WhereConst.name = "xx"; + Expression> exp =it=>!SqlFunc.IsNullOrEmpty(WhereConst.name);; + SqlServerExpressionContext expContext = new SqlServerExpressionContext(); + expContext.Resolve(exp, ResolveExpressType.WhereSingle); + var value = expContext.Result.GetString(); + var pars = expContext.Parameters; + base.Check(value, pars, "NOT( @MethodConst0='' OR @MethodConst0 IS NULL )", new List() { + new SugarParameter("@MethodConst0","xx") + }, "StringIsNullOrEmpty5 error"); + } #endregion } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 4c6a0a91e..dd87c29af 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -180,5 +180,9 @@ namespace SqlSugar this.Context.Result.Append(" " + ExpressionConst.Format1 + parameter.BaseParameter.Index); } } + protected void AppendNot(object Value) + { + this.Context.Result.Append("NOT"); + } } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs index 0e8945cb0..cb1c6fcbd 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs @@ -20,12 +20,15 @@ namespace SqlSugar case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectMultiple: case ResolveExpressType.Update: + var nodeType = expression.NodeType; base.Expression = expression.Operand; - if (base.Expression is BinaryExpression||parameter.BaseExpression is BinaryExpression) + if (base.Expression is BinaryExpression || parameter.BaseExpression is BinaryExpression) { BaseParameter.ChildExpression = base.Expression; parameter.CommonTempData = CommonTempDataType.Default; base.Start(); + if (nodeType == ExpressionType.Not) + AppendNot(parameter.CommonTempData); parameter.BaseParameter.CommonTempData = parameter.CommonTempData; parameter.BaseParameter.ChildExpression = base.Expression; parameter.CommonTempData = null; @@ -34,6 +37,19 @@ namespace SqlSugar { BaseParameter.ChildExpression = base.Expression; parameter.CommonTempData = CommonTempDataType.ChildNodeSet; + if (nodeType == ExpressionType.Not) + AppendNot(parameter.CommonTempData); + base.Start(); + parameter.BaseParameter.CommonTempData = parameter.CommonTempData; + parameter.BaseParameter.ChildExpression = base.Expression; + parameter.CommonTempData = null; + } + else + { + BaseParameter.ChildExpression = base.Expression; + parameter.CommonTempData = CommonTempDataType.ChildNodeSet; + if (nodeType == ExpressionType.Not) + AppendNot(parameter.CommonTempData); base.Start(); parameter.BaseParameter.CommonTempData = parameter.CommonTempData; parameter.BaseParameter.ChildExpression = base.Expression;