diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index 67ab5e386..2220d421b 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -509,6 +509,12 @@ namespace SqlSugar return string.Format(" DATEDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName); ; } + public virtual string FormatRowNumber(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); + } public virtual string Format(MethodCallExpressionModel model) { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs index fc318f309..1ff945b38 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs @@ -76,6 +76,7 @@ namespace SqlSugar string Oracle_ToChar(MethodCallExpressionModel model); string SqlServer_DateDiff(MethodCallExpressionModel model); string Format(MethodCallExpressionModel model); + string FormatRowNumber(MethodCallExpressionModel model); string Abs(MethodCallExpressionModel model); string Round(MethodCallExpressionModel model); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs index b80c30198..e773e8843 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs @@ -109,6 +109,7 @@ namespace SqlSugar public virtual Action InitMappingInfo { get; set; } public virtual Action RefreshMapping { get; set; } public virtual Type SubTableType { get; set; } + public string MethodName { get; set; } #endregion #region Core methods diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 353f15b8a..54486d762 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -677,7 +677,7 @@ namespace SqlSugar .GetEntityInfo(oppsite.Expression.Type).Columns.FirstOrDefault(it => it.PropertyName == oppsite.Member.Name); return columnInfo; } - protected MethodCallExpressionArgs GetMethodCallArgs(ExpressionParameter parameter, Expression item) + protected MethodCallExpressionArgs GetMethodCallArgs(ExpressionParameter parameter, Expression item,string name=null) { var newContext = this.Context.GetCopyContext(); newContext.MappingColumns = this.Context.MappingColumns; @@ -685,6 +685,7 @@ namespace SqlSugar newContext.IgnoreComumnList = this.Context.IgnoreComumnList; newContext.IsSingle = this.Context.IsSingle; newContext.SqlFuncServices = this.Context.SqlFuncServices; + newContext.MethodName = name; newContext.Resolve(item, this.Context.IsJoin ? ResolveExpressType.WhereMultiple : ResolveExpressType.WhereSingle); this.Context.Index = newContext.Index; this.Context.ParameterIndex = newContext.ParameterIndex; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index 702ecbad9..bb180da14 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -559,7 +559,7 @@ namespace SqlSugar } else if (isBinaryExpression) { - model.Args.Add(GetMethodCallArgs(parameter, item)); + model.Args.Add(GetMethodCallArgs(parameter, item,name)); } else if (isSubIIF) { @@ -1002,6 +1002,10 @@ namespace SqlSugar case "Format": var xx=base.BaseParameter; var result = this.Context.DbMehtods.Format(model); + if (this.Context.MethodName == "RowNumber") + { + result = this.Context.DbMehtods.FormatRowNumber(model); + } this.Context.Parameters.RemoveAll(it => model.Args.Select(x=>x.MemberName.ObjToString()).Contains(it.ParameterName) ); return result; case "Abs":