From c672e6493e6d1ce3f65dc2f0fd3a2487116b1b50 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 16 Aug 2022 12:51:54 +0800 Subject: [PATCH] Code optimization --- .../ResolveItems/BinaryExpressionResolve.cs | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index 17eb36cbc..6037531cb 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -29,7 +29,7 @@ namespace SqlSugar var expression = this.Expression as BinaryExpression; var operatorValue = parameter.OperatorValue = ExpressionTool.GetOperator(expression.NodeType); - if (IsGroupSubquery(expression.Right,operatorValue)) + if (IsGroupSubquery(expression.Right, operatorValue)) { if (ExpressionTool.IsUnConvertExpress(expression.Right)) { @@ -37,7 +37,7 @@ namespace SqlSugar } else { - InSubGroupBy(expression, operatorValue=="<>"?"NOT":""); + InSubGroupBy(expression, operatorValue == "<>" ? "NOT" : ""); } return; } @@ -54,6 +54,15 @@ namespace SqlSugar var lbrb = rightBinary && leftIsBinary; var lsbs = !leftIsBinary && !rightBinary; var isAppend = !base.Context.Result.Contains(ExpressionConst.FormatSymbol); + ConvertExpression(ref leftExpression, ref rightExpression, isAppend); + parameter.LeftExpression = leftExpression; + parameter.RightExpression = rightExpression; + Left(expression, leftExpression); + Right(parameter, operatorValue, isEqual, rightExpression, lsbs); + } + + private void ConvertExpression(ref Expression leftExpression, ref Expression rightExpression, bool isAppend) + { if (isAppend) { base.Context.Result.Append(ExpressionConst.LeftParenthesis); @@ -71,23 +80,14 @@ namespace SqlSugar { leftExpression = (leftExpression as UnaryExpression).Operand; } - if (rightExpression is UnaryExpression&& (rightExpression as UnaryExpression).NodeType == ExpressionType.Convert) + if (rightExpression is UnaryExpression && (rightExpression as UnaryExpression).NodeType == ExpressionType.Convert) { rightExpression = (rightExpression as UnaryExpression).Operand; } - parameter.LeftExpression = leftExpression; - parameter.RightExpression = rightExpression; - base.Expression = leftExpression; - base.IsLeft = true; - base.Start(); - if (leftExpression is UnaryExpression && leftExpression.Type == UtilConstants.BoolType && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace)) - { - this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType)); - } - else if (leftExpression is UnaryExpression && ExpressionTool.RemoveConvert(leftExpression) is BinaryExpression && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace)) - { - this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType)); - } + } + + private void Right(ExpressionParameter parameter, string operatorValue, bool isEqual, Expression rightExpression, bool lsbs) + { base.IsLeft = false; base.Expression = rightExpression; base.Start(); @@ -109,6 +109,21 @@ namespace SqlSugar } } + private void Left(BinaryExpression expression, Expression leftExpression) + { + base.Expression = leftExpression; + base.IsLeft = true; + base.Start(); + if (leftExpression is UnaryExpression && leftExpression.Type == UtilConstants.BoolType && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace)) + { + this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType)); + } + else if (leftExpression is UnaryExpression && ExpressionTool.RemoveConvert(leftExpression) is BinaryExpression && !this.Context.Result.Contains(ExpressionConst.ExpressionReplace)) + { + this.Context.Result.AppendFormat(" {0} ", ExpressionTool.GetOperator(expression.NodeType)); + } + } + private void InSubGroupByConvertExpress(BinaryExpression expression) { var leftSql = GetNewExpressionValue(expression.Left);