在servicestack ormlite中对所有结果进行分页

问题描述 投票:0回答:2

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

c# pagination ormlite-servicestack
2个回答
5
投票

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();

-1
投票

据我所知,如果没有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
© www.soinside.com 2019 - 2024. All rights reserved.