【问题标题】:Paging all results in servicestack ormlite在 servicestack ormlite 中分页所有结果
【发布时间】:2016-01-08 08:56:44
【问题描述】:

有没有办法对检索所有结果的 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# paging ormlite-servicestack


    【解决方案1】:

    db.Select&lt;T&gt; 以相同的方式工作,并针对指定的表执行 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));
    

    Paging in AutoQuery

    此外,由于您要对查询进行分页,您应该查看 automatic support for paging in AutoQuery,其中包括类型化的服务客户端支持,例如:

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

    除了提供typed streaming APIGetLazy&lt;T&gt;,它在后台透明地执行多个分页查询:

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

    【讨论】:

      【解决方案2】:

      据我所知,如果没有 where 就无法做到这一点,但你可以设置 where 像“id is not null”或类似的东西。

      另外,您可以使用 builder :

      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
      

      【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多