Browse Source

Add SqlFunc.RowNumber & SqlFunc.RowCount

SqlSugar5
sunkaixuan 2 years ago
parent
commit
01c0c54e03
  1. 15
      Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs
  2. 3
      Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs
  3. 12
      Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs
  4. 4
      Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs

15
Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs

@ -8,6 +8,21 @@ namespace SqlSugar
{
public partial class DefaultDbMethod : IDbMethods
{
public virtual string RowNumber(MethodCallExpressionModel model)
{
if (model.Args.Count == 1)
{
return $"row_number() over(order by {model.Args[0].MemberName})";
}
else
{
return $"row_number() over( partition by {model.Args[1].MemberName} order by {model.Args[0].MemberName})";
}
}
public virtual string RowCount(MethodCallExpressionModel model)
{
return "count(1) over()";
}
public virtual string IIF(MethodCallExpressionModel model)
{
var parameter = model.Args[0];

3
Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs

@ -87,6 +87,9 @@ namespace SqlSugar
string Asc(MethodCallExpressionModel model);
string Desc(MethodCallExpressionModel model);
string Stuff(MethodCallExpressionModel model);
string RowNumber(MethodCallExpressionModel model);
string RowCount(MethodCallExpressionModel model);
string GetDateString(string dateValue,string format);
string GetForXmlPath();
}

12
Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs

@ -9,6 +9,18 @@ namespace SqlSugar
{
public partial class SqlFunc
{
public static int RowNumber(object orderByField, object partitionBy)
{
throw new NotSupportedException("Can only be used in expressions");
}
public static int RowNumber(object orderByField)
{
throw new NotSupportedException("Can only be used in expressions");
}
public static int RowCount()
{
throw new NotSupportedException("Can only be used in expressions");
}
public static T Desc<T>(T value)
{
throw new NotSupportedException("Can only be used in expressions");

4
Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs

@ -1010,6 +1010,10 @@ namespace SqlSugar
return this.Context.DbMehtods.Desc(model);
case "Stuff":
return this.Context.DbMehtods.Stuff(model);
case "RowNumber":
return this.Context.DbMehtods.RowNumber(model);
case "RowCount":
return this.Context.DbMehtods.RowCount(model);
default:
break;
}

Loading…
Cancel
Save