From 9938bec957e482359e6b59fd91bbc0015e473bf4 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 2 Sep 2022 20:16:34 +0800 Subject: [PATCH] Update exp to sql (Optimization of +) --- .../ResolveItems/BinaryExpressionResolve.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index 49266790b..a30b8f86b 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -33,12 +33,34 @@ namespace SqlSugar { SubGroup(expression, operatorValue); } + else if (IsJoinString(expression, operatorValue)) + { + JoinString(parameter, expression); + } else { DefaultBinary(parameter, expression, operatorValue); } } + private void JoinString(ExpressionParameter parameter, BinaryExpression expression) + { + var leftString = GetNewExpressionValue(expression.Left); + var RightString = GetNewExpressionValue(expression.Right); + var joinString = this.Context.DbMehtods.MergeString(leftString, RightString); + if (this.Context.Result.Contains(ExpressionConst.FormatSymbol)) + { + base.Context.Result.Replace("{0}", $" {joinString} "); + base.Context.Result.Append(" " + ExpressionConst.ExpressionReplace + parameter.BaseParameter.Index + " "); + } + else + { + base.Context.Result.Append($" {joinString} "); + } + } + + + private void DefaultBinary(ExpressionParameter parameter, BinaryExpression expression, string operatorValue) { var isEqual = expression.NodeType == ExpressionType.Equal; @@ -232,7 +254,12 @@ namespace SqlSugar } return true; } - + private static bool IsJoinString(BinaryExpression expression, string operatorValue) + { + return operatorValue == "+" + && expression.Right.Type == UtilConstants.StringType + && expression.Left.Type==UtilConstants.StringType; + } private static bool RightIsHasValue(Expression leftExpression, Expression rightExpression,bool isLogic) { return isLogic&&