From 7887282b6a560fad80f0a29ae50c1695e88d677f Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Sat, 31 Jul 2021 18:11:54 +0800 Subject: [PATCH] Support string.format --- .../ExpressionsToSql/DbMethods/DefaultDbMethod.cs | 7 +++++++ .../ExpressionsToSql/DbMethods/IDbMethods.cs | 1 + .../ResolveItems/MethodCallExpressionResolve.cs | 13 +++++++++++++ 3 files changed, 21 insertions(+) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index de1a65843..f0ca5b768 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -470,5 +470,12 @@ namespace SqlSugar var parameter3 = model.Args[2]; return string.Format(" DATEDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName); ; } + + public string Format(MethodCallExpressionModel model) + { + var str = model.Args[0].MemberValue.ObjToString(); + var array = model.Args.Skip(1).Select(it => it.IsMember?it.MemberName:it.MemberValue).ToArray(); + return string.Format("'"+str+ "'", array); + } } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs index 63467970d..71ff30512 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs @@ -72,5 +72,6 @@ namespace SqlSugar string Oracle_ToDate(MethodCallExpressionModel model); string Oracle_ToChar(MethodCallExpressionModel model); string SqlServer_DateDiff(MethodCallExpressionModel model); + string Format(MethodCallExpressionModel model); } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index 9d8add3f6..a5b5e8b91 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -753,6 +753,10 @@ namespace SqlSugar var isValid = model.Args[0].IsMember && model.Args[1].IsMember == false; //Check.Exception(!isValid, "SqlFunc.MappingColumn parameters error, The property name on the left, string value on the right"); this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[1].MemberName.ObjToString()); + if (mappingColumnResult == "") + { + return model.Args[1].MemberName.ObjToString().TrimStart('\'').TrimEnd('\''); + } return mappingColumnResult; case "IsNull": return this.Context.DbMehtods.IsNull(model); @@ -780,6 +784,11 @@ namespace SqlSugar return this.Context.DbMehtods.Oracle_ToDate(model); case "SqlServer_DateDiff": return this.Context.DbMehtods.SqlServer_DateDiff(model); + case "Format": + var xx=base.BaseParameter; + var result = this.Context.DbMehtods.Format(model); + this.Context.Parameters.RemoveAll(it => model.Args.Select(x=>x.MemberName.ObjToString()).Contains(it.ParameterName) ); + return result; default: break; } @@ -802,6 +811,10 @@ namespace SqlSugar { return true; } + if (expression.Method.Name == "Format" && expression.Method.DeclaringType == UtilConstants.StringType) + { + return true; + } if (IsExtMethod(expression.Method.Name)) return true; if (IsParseMethod(expression))