对servicestack或lite中的所有结果进行分页

本文关键字:结果 分页 servicestack lite | 更新日期: 2023-09-27 18:29:25

是否有任何方法可以对检索所有结果的Ormlite查询的结果进行分页。从这里的另一个帖子,我发现了以下内容:

var result = db.Select<Group>( q => q.Where(predicate).Limit(skip:5, rows:10 ));

但是,我希望不使用"Where"子句进行查询。当省略这段代码时,Limit方法将不再可用。因此,有效地说,我试图做的是这样的事情:

var result = db.Select<Group>().Limit(skip:5, rows:10);

也许Select不是检索所有记录的正确方法?

对servicestack或lite中的所有结果进行分页

db.Select<T>以相同的方式工作,并对指定的表执行SELECT,但是,如果您想在服务器上执行自定义查询,则需要提供第一个示例中所做的查询:

var result = db.Select<Group>(q => q.Where(predicate).Limit(skip:5, rows:10));

也可以重写为:

var q = db.From<Group>();
db.Select(q.Where(predicate).Limit(skip:5, rows:10));

当你不提供查询时,你会对表执行SELECT,例如:

db.Select<Group>()

已执行查询并返回Group表中的所有行。

如果你想限制它,你仍然需要提供查询,例如:

db.Select<Group>(q => q.Limit(skip:5, rows:10));

或者:

db.Select(db.From<Group>().Limit(skip:5, rows:10));

自动查询中的分页

此外,由于您希望对查询进行分页,您应该查看AutoQuery中对分页的自动支持,其中包括键入的服务客户端支持,例如:

client.Get(new QueryRockstars { Skip=10, Take=20, OrderBy="Id" });

以及提供具有GetLazy<T>的类型化流式API,其在后台透明地执行多个页面查询:

var top250 = client.GetLazy(new QueryMovies { 
    Ratings = new[]{ "G", "PG-13" } 
})
.Take(250)
.ToList();

正如我所知,如果没有where,你就无法做到这一点,但你可以设置where,比如"id不是null"或类似的东西。

此外,您可以使用生成器:

QueryBuilder<MyDataObject, String> builder = myDao.queryBuilder();
builder.limit(10);
builder.orderBy("columnName", true)  // true for ascending, false    for     descending
List<MyDataObject> list = myDao.query(builder.prepare());  // returns list of ten items