对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不是检索所有记录的正确方法?
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