Table of Contents

分组游标

  • 对分组进行截取,处理分页和排序
  • 本组件是对ShadowSql.Core同名组件的泛型扩展
  • 支持对数据表类型特殊处理,增强功能、增加易用性

1. 接口

ICursor

2. 基类

CursorBase

3. 类

GroupByTableCursor<TTable>

class GroupByTableCursor<TTable>
    where TTable : ITable;

4. ToCursor

4.1 ToCursor扩展方法

  • 从sql分组创建分组游标
GroupByTableCursor<TTable> ToCursor<TTable>(this GroupByTableSqlQuery<TTable> groupBy, int limit = 0, int offset = 0)
        where TTable : ITable;
var cursor = _db.From("Employees")
    .SqlGroupBy("DepartmentId")
    .ToCursor();
    .CountAsc();
// SELECT * FROM [Employees] GROUP BY [DepartmentId] ORDER BY COUNT(*)

4.2 ToCursor重载扩展方法

  • 从逻辑分组创建分组游标
GroupByTableCursor<TTable> ToCursor<TTable>(this GroupByTableQuery<TTable> groupBy, int limit = 0, int offset = 0)
        where TTable : ITable;
var cursor = _db.From("Employees")
    .GroupBy("DepartmentId")
    .ToCursor()
    .AggregateDesc(g => g.Max("Age"));
// SELECT * FROM [Employees] GROUP BY [DepartmentId] ORDER BY MAX([Age]) DESC

5. AggregateAsc方法

  • 聚合正序
GroupByTableCursor<TTable> AggregateAsc(Func<TTable, IAggregateField> aggregate);
var cursor = new CommentTable()
    .SqlGroupBy(c => [c.PostId])
    .ToCursor()
    .AggregateAsc(c => c.Pick.Sum());
// SELECT * FROM [Comments] GROUP BY [PostId] ORDER BY SUM([Pick])

6. AggregateDesc方法

  • 聚合正序
GroupByTableCursor<TTable> AggregateDesc(Func<TTable, IAggregateField> aggregate);
var cursor = new CommentTable()
    .GroupBy(c => [c.PostId])
    .ToCursor()
    .AggregateDesc(c => c.Pick.Sum());
// SELECT * FROM [Comments] GROUP BY [PostId] ORDER BY SUM([Pick]) DESC

7. 其他相关功能