有没有办法对检索所有结果的 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 all,例如:
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" });
以及提供类型化流API和
GetLazy<T>
,它可以在幕后透明地执行多个分页查询:
var top250 = client.GetLazy(new QueryMovies {
Ratings = new[]{ "G", "PG-13" }
})
.Take(250)
.ToList();
据我所知,如果没有where,你就无法做到这一点,但是你可以设置where,例如“id不为空”或类似的东西。
此外,您可以使用构建器:
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