diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index e6aeeaf0f..44c7a147c 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -500,6 +500,15 @@ namespace SqlSugar ((item as UnaryExpression).Operand as MemberExpression).Expression != null && ((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.Parameter; } + protected static bool IsNotParameter(Expression item) + { + return item is UnaryExpression && + item.Type == UtilConstants.BoolType && + (item as UnaryExpression).NodeType == ExpressionType.Not && + (item as UnaryExpression).Operand is MemberExpression && + ((item as UnaryExpression).Operand as MemberExpression).Expression != null && + ((item as UnaryExpression).Operand as MemberExpression).Expression.NodeType == ExpressionType.MemberAccess; + } protected bool IsSubMethod(MethodCallExpression express) { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 9df223d17..841889dcd 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -80,6 +80,17 @@ namespace SqlSugar base.Context.Result.CurrentParameter = null; } } + else if (IsNotParameter(item)) + { + try + { + parameter.Context.Result.Append(base.Context.GetEqString(memberName,AppendParameter(ExpressionTool.DynamicInvoke(item).ObjToBool()))); + } + catch + { + throw new NotSupportedException(item.ToString()); + } + } else if (IsMethod(item)) { if (item is UnaryExpression) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs index a662a34c1..7f9c41d96 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/UnaryExpressionResolve.cs @@ -41,6 +41,10 @@ namespace SqlSugar { AppendNotMember(parameter,nodeType); } + else if (baseParameter.OperatorValue == "=" && IsNotParameter(oldExpression)) + { + AppendNotParameter(parameter, nodeType); + } else if (base.Expression is BinaryExpression || parameter.BaseExpression is BinaryExpression || baseParameter.CommonTempData.ObjToString() == CommonTempDataType.Append.ToString()) { Append(parameter, nodeType); @@ -156,5 +160,25 @@ namespace SqlSugar parameter.CommonTempData = null; } + + private void AppendNotParameter(ExpressionParameter parameter, ExpressionType nodeType) + { + BaseParameter.ChildExpression = base.Expression; + this.IsLeft = parameter.IsLeft; + parameter.CommonTempData = CommonTempDataType.Result; + base.Start(); + var result = this.Context.DbMehtods.IIF(new MethodCallExpressionModel() + { + Args = new List() { + new MethodCallExpressionArgs(){ IsMember=true, MemberName=AppendParameter(parameter.CommonTempData)+"=1" }, + new MethodCallExpressionArgs(){ IsMember=true,MemberName=AppendParameter(0) }, + new MethodCallExpressionArgs(){ IsMember=true, MemberName=AppendParameter(1) } + } + }); + this.Context.Result.Append(result); + parameter.BaseParameter.ChildExpression = base.Expression; + parameter.CommonTempData = null; + } + } }