From b0db25a094b2641cc720f770a834404cda98e7b5 Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Sat, 4 Sep 2021 09:26:02 +0800 Subject: [PATCH] Add Sqlfunc.Abs Sqlfunc.Round --- .../ExpressionsToSql/DbMethods/DefaultDbMethod.cs | 12 ++++++++++++ .../ExpressionsToSql/DbMethods/IDbMethods.cs | 2 ++ .../SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs | 5 +++++ .../ResolveItems/MethodCallExpressionResolve.cs | 4 ++++ 4 files changed, 23 insertions(+) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index f0ca5b768..d48b243fb 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -477,5 +477,17 @@ namespace SqlSugar var array = model.Args.Skip(1).Select(it => it.IsMember?it.MemberName:it.MemberValue).ToArray(); return string.Format("'"+str+ "'", array); } + + public string Abs(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" ABS({0}) ", parameter.MemberName); + } + + public string Round(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" ROUND({0},{1}) ", parameter.MemberName); + } } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs index 71ff30512..7f05f6432 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs @@ -73,5 +73,7 @@ namespace SqlSugar string Oracle_ToChar(MethodCallExpressionModel model); string SqlServer_DateDiff(MethodCallExpressionModel model); string Format(MethodCallExpressionModel model); + string Abs(MethodCallExpressionModel model); + string Round(MethodCallExpressionModel model); } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs index 3c5872439..eebb04310 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs @@ -130,6 +130,11 @@ namespace SqlSugar public static TResult GetSelfAndAutoFill(TResult value) { throw new NotSupportedException("Can only be used in expressions"); } public static DateTime GetDate() { throw new NotSupportedException("Can only be used in expressions"); } public static string GetRandom() { throw new NotSupportedException("Can only be used in expressions"); } + + + public static T Abs( T value) { throw new NotSupportedException("Can only be used in expressions"); } + public static string Round(T value,int precision) { throw new NotSupportedException("Can only be used in expressions"); } + /// /// Subquery /// diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index a5b5e8b91..82c90cb03 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -789,6 +789,10 @@ namespace SqlSugar var result = this.Context.DbMehtods.Format(model); this.Context.Parameters.RemoveAll(it => model.Args.Select(x=>x.MemberName.ObjToString()).Contains(it.ParameterName) ); return result; + case "Abs": + return this.Context.DbMehtods.Abs(model); + case "Round": + return this.Context.DbMehtods.Round(model); default: break; }