diff --git a/OrmTest/ExpressionTest/Method.cs b/OrmTest/ExpressionTest/Method.cs index 55201091b..bc740c9d5 100644 --- a/OrmTest/ExpressionTest/Method.cs +++ b/OrmTest/ExpressionTest/Method.cs @@ -22,6 +22,7 @@ namespace OrmTest.ExpressionTest for (int i = 0; i < base.Count; i++) { StringIsNullOrEmpty(); + StringIsNullOrEmpty2(); } base.End("Method Test"); } @@ -34,7 +35,20 @@ namespace OrmTest.ExpressionTest var pars = expContext.Parameters; base.Check(value, pars, "(( Id > @Id0 ) OR ( Id='' OR Id IS NULL ))", new List() { new SugarParameter("@Id0",2) - }, "whereSingle1"); + }, "StringIsNullOrEmpty"); + } + + private void StringIsNullOrEmpty2() + { + Expression> exp = it => 2==it.Id || NBORM.IsNullOrEmpty(true); ; + SqlServerExpressionContext expContext = new SqlServerExpressionContext(exp, ResolveExpressType.WhereSingle); + expContext.Resolve(); + var value = expContext.Result.GetString(); + var pars = expContext.Parameters; + base.Check(value, pars, "(( Id > @Id0 ) OR ( Id='' OR Id IS NULL ))", new List() { + new SugarParameter("@Id0",2) + }, "StringIsNullOrEmpty2"); } } } + diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs index 7b7d97c38..c6065c81a 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs @@ -13,17 +13,24 @@ namespace SqlSugar var expression = base.Expression as ConstantExpression; var isLeft = parameter.IsLeft; object value = expression.Value; + var baseParameter = parameter.BaseParameter; + var isSetTempData = baseParameter.CommonTempData.IsValuable() && baseParameter.CommonTempData.Equals(CommonTempDataType.ChildNodeSet); switch (parameter.Context.ResolveType) { case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectMultiple: - parameter.BaseParameter.CommonTempData = value; + baseParameter.CommonTempData = value; break; case ResolveExpressType.WhereSingle: - AppendParameter(parameter, isLeft, value); - break; case ResolveExpressType.WhereMultiple: - AppendParameter(parameter, isLeft, value); + if (isSetTempData) + { + baseParameter.CommonTempData = value; + } + else + { + AppendParameter(parameter, isLeft, value); + } break; case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldMultiple: diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs index d77aee1e6..6178c88ee 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs @@ -16,7 +16,7 @@ namespace SqlSugar case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereMultiple: base.Expression = expression.Operand; - if (base.Expression is MemberExpression) + if (base.Expression is MemberExpression|| base.Expression is ConstantExpression) { BaseParameter.ChildExpression = base.Expression; parameter.CommonTempData = CommonTempDataType.ChildNodeSet;