diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs index 2544baa50..6608495b4 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs @@ -17,25 +17,42 @@ namespace SqlSugar express.IfTrue, express.IfFalse }; - if (express.Test is MemberExpression memberExpression) + if (ExpressionTool.GetParameters(express.Test).Count == 0) { - var ps= ExpressionTool.GetParameters(express.Test); - if (ps?.Count == 0) + while (express != null) { - var value= ExpressionTool.DynamicInvoke(express.Test); - if (value is bool boolValue) + var ps = ExpressionTool.GetParameters(express.Test); + if (ps?.Count == 0) { - if (boolValue) + var value = ExpressionTool.DynamicInvoke(express.Test); + if (value is bool boolValue) { - args[2] = express.IfTrue; - args[1] = express.IfTrue; + // 根据结果选择分支 + var next = boolValue ? express.IfTrue : express.IfFalse; + args[1] = next; + args[2] = next; + + // 如果选择的分支还是一个条件表达式,就继续展开 + if (ExpressionTool.RemoveConvert(next) is ConditionalExpression childConditional) + { + args[0] = express.Test; + express = childConditional; + continue; + } + else + { + break; // 到底了,不是条件表达式,跳出循环 + } } - else + else { - args[1] = express.IfFalse; - args[2] = express.IfFalse; + break; // 不是bool,无法判断,退出 } } + else + { + break; // 有参数,不能动态执行,退出 + } } } if (IsBoolMember(express))