From 5b481ce909ef523ad5c11cbe1b043d1dd333bb7a Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 28 May 2019 14:57:28 +0800 Subject: [PATCH] Update exp to sql --- .../MemberInitExpressionResolve.cs | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 6b3e58cb1..4175eb7f7 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -57,12 +57,40 @@ namespace SqlSugar string parameterName = AppendParameter(paramterValue); this.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); } + else if (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.Parameter) + { + if (base.Context.Result.IsLockCurrentParameter == false) + { + base.Context.Result.CurrentParameter = parameter; + base.Context.Result.IsLockCurrentParameter = true; + parameter.IsAppendTempDate(); + base.Expression = item; + base.Expression = (item as UnaryExpression).Operand; + base.Start(); + parameter.IsAppendResult(); + var result = this.Context.DbMehtods.IIF(new MethodCallExpressionModel() + { + Args = new List() { + new MethodCallExpressionArgs(){ IsMember=true, MemberName=parameter.CommonTempData.ObjToString()+"=1" }, + new MethodCallExpressionArgs(){ IsMember=true,MemberName=AppendParameter(0) }, + new MethodCallExpressionArgs(){ IsMember=true, MemberName=AppendParameter(1) } + } + }); + parameter.Context.Result.Append(base.Context.GetEqString(memberName, result)); + base.Context.Result.CurrentParameter = null; + } + } else if (IsMethod(item)) { if (item is UnaryExpression) item = (item as UnaryExpression).Operand; var callMethod = item as MethodCallExpression; - if (MethodTimeMapping.Any(it => it.Key == callMethod.Method.Name) || MethodMapping.Any(it=>it.Key==callMethod.Method.Name)||IsExtMethod(callMethod.Method.Name)||IsSubMethod(callMethod)|| callMethod.Method.DeclaringType.FullName.StartsWith(UtilConstants.AssemblyName+UtilConstants.Dot)) + if (MethodTimeMapping.Any(it => it.Key == callMethod.Method.Name) || MethodMapping.Any(it => it.Key == callMethod.Method.Name) || IsExtMethod(callMethod.Method.Name) || IsSubMethod(callMethod) || callMethod.Method.DeclaringType.FullName.StartsWith(UtilConstants.AssemblyName + UtilConstants.Dot)) { MethodCall(parameter, memberName, item); } @@ -105,7 +133,7 @@ namespace SqlSugar { try { - var value =ExpressionTool.DynamicInvoke(item); + var value = ExpressionTool.DynamicInvoke(item); var parameterName = AppendParameter(value); parameter.Context.Result.Append(base.Context.GetEqString(memberName, parameterName)); }