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);