From 593f6597f11d92b68d00a3b88c02fe0162c4e77c Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 22 Oct 2023 13:23:22 +0800 Subject: [PATCH] Synchronization code --- .../SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs | 7 +++++++ .../SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs | 1 + .../SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs | 5 ++++- .../Realization/MySql/SqlBuilder/MySqlExpressionContext.cs | 6 ++++++ .../SqlServer/SqlBuilder/SqlServerExpressionContext.cs | 6 ++++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index ccbdc298f..dcdce1796 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -716,6 +716,13 @@ namespace SqlSugar { return null; } + public virtual string JsonIndex(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter1 = model.Args[1]; + return $"({parameter.MemberName}::json ->> {parameter1.MemberValue})"; + } + public virtual string JsonField(MethodCallExpressionModel model) { diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs index 254795a5a..2c20c793d 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs @@ -98,6 +98,7 @@ namespace SqlSugar string Exists(MethodCallExpressionModel model); string GetDateString(string dateValue,string format); string GetForXmlPath(); + string JsonIndex(MethodCallExpressionModel model); string JsonField(MethodCallExpressionModel model); string JsonContainsFieldName(MethodCallExpressionModel model); string JsonArrayLength(MethodCallExpressionModel model); diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs index 2fded9d55..e6938665d 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs @@ -113,7 +113,10 @@ namespace SqlSugar { throw new NotSupportedException("Can only be used in expressions"); } - + public static string JsonIndex(object json, int jsonIndex) + { + throw new NotSupportedException("Can only be used in expressions"); + } public static string JsonField(object json, string fieldName,string includeFieldName) { throw new NotSupportedException("Can only be used in expressions"); diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs index 16d7a1efa..579124c4c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs @@ -17,6 +17,12 @@ namespace SqlSugar } public class MySqlMethod : DefaultDbMethod, IDbMethods { + public override string JsonIndex(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter1 = model.Args[1]; + return $"JSON_UNQUOTE(JSON_EXTRACT({parameter.MemberName}, '$[{parameter1.MemberValue}]'))"; + } public override string WeekOfYear(MethodCallExpressionModel mode) { var parameterNameA = mode.Args[0].MemberName; diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs index 1ebf004df..2f9ac5892 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs @@ -20,6 +20,12 @@ namespace SqlSugar } public partial class SqlServerMethod : DefaultDbMethod, IDbMethods { + public override string JsonIndex(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter1 = model.Args[1]; + return $"JSON_VALUE({parameter.MemberName}, '$[{parameter1.MemberValue}]')"; + } public override string CharIndexNew(MethodCallExpressionModel model) { return string.Format("CHARINDEX ({1},{0})", model.Args[0].MemberName, model.Args[1].MemberName);