diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Method.cs b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Method.cs index 813c44807..f670ec85e 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Method.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Method.cs @@ -74,10 +74,25 @@ namespace OrmTest.UnitTest Replace(); Length(); Time(); + + Test1(); } base.End("Method Test"); } + private void Test1() + { + var ids = new int[] { 1, 2, 3 }; + Expression> exp = it => ids.Contains(it.Id)&&!SqlFunc.IsNullOrEmpty(it.Name); + SqlServerExpressionContext expContext = new SqlServerExpressionContext(); + expContext.Resolve(exp, ResolveExpressType.WhereSingle); + var value = expContext.Result.GetString(); + var pars = expContext.Parameters; + base.Check(value, pars, "(([Id] IN ('1','2','3')) AND NOT( [Name]='' OR [Name] IS NULL ))", new List() { + + }, "Test1 error"); + } + private void ExtendToString() { Expression> exp = it => it.Id.ToString() == "a"; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs index 5d24e5f54..afe596dc9 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs @@ -52,6 +52,12 @@ namespace SqlSugar _Result = value; } } + public bool LastCharIsSpace{ + get { + if (_Result == null|| _Result.Length==0) return true; + return _Result.ToString().Last() == UtilConstants.SpaceChar; + } + } #endregion public string GetString() { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 0133e1026..8f67ff753 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -239,9 +239,10 @@ namespace SqlSugar protected void AppendNot(object Value) { var isAppend = !this.Context.Result.Contains(ExpressionConst.FormatSymbol); + var lastCharIsSpace = this.Context.Result.LastCharIsSpace; if (isAppend) { - this.Context.Result.Append("NOT"); + this.Context.Result.Append(lastCharIsSpace?"NOT":" NOT"); } else { diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs index f89b173d9..224e05f84 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs @@ -9,6 +9,7 @@ namespace SqlSugar public const string Dot = "."; public const char DotChar = '.'; internal const string Space = " "; + internal const char SpaceChar =' '; internal const string AssemblyName = "SqlSugar"; internal const string ReplaceKey = "{662E689B-17A1-4D06-9D27-F29EAB8BC3D6}";