【问题标题】:RavenDB paging indexRavenDB 分页索引
【发布时间】:2010-08-31 14:48:44
【问题描述】:

我有一个 Linq 查询

var mdls = (from mdl in query dbSession.Query<MyModel>("MyIndex")
              orderby mdl.Name
              select dept).Skip(page.Value).Take(4);

其中“MyIndex”是 RavenDB 中定义的简单索引。我知道在 RavenDB 中查询索引时,它会返回“TotalResults”。见here

如何获取具有TotalResult 属性的查询结果?

【问题讨论】:

    标签: linq pagination ravendb


    【解决方案1】:

    如果你正在执行一个 LuceneQuery,你会得到一个返回的 DocumentQuery,它有一个包含 TotalResults 的 QueryResult 属性,因此你可以按如下方式访问它:

    var documentQuery = (from mdl in query dbSession.LuceneQuery<MyModel>("MyIndex")
                         orderby mdl.Name
                         select dept).Skip(page.Value).Take(4);
    
    var totalResults = documentQuery.QueryResult.TotalResults;
    

    如果您正在执行 LINQ 查询,那么您可以在使用 Skip and Take 限制查询之前调用 Count():

    var linqQuery = (from mdl in query dbSession.Query<MyModel>("MyIndex")
                          orderby mdl.Name
                          select dept);
    
    var totalResults = linqQuery.Count();
    
    var pageOfResults = linqQuery.Skip(page.Value).Take(4);
    

    【讨论】:

    • 如果我做LuceneQuery&lt;Department&gt;,我会得到QueryResult,但在上述情况下不会。
    【解决方案2】:

    您需要在查询结束时执行类似的操作

    .Customize(x => x.TotalResult)
    

    TotalResult 属性仅在 LuceneQuery 上可用,在 LINQ 查询上不可用。

    【讨论】:

    • 我没有找到x.TotalResult 属性。你能告诉我完整的 LINQ 语句吗?
    • 对不起,我错过了一点,请参阅文档以获取完整的语法,ravendb.net/faq/total-results-in-paged-data-set
    • 这里说的是session.LuceneQuery&lt;T&gt;,但这里我使用的是session.Query&lt;T&gt;
    【解决方案3】:

    您似乎可以通过session.LuceneQuery&lt;YouModel&gt;("YourIndex") 而不是从session.Query&lt;YourModel&gt;("YourIndex") 获得QueryResult。但是,我想知道为什么要使用 session.Query&lt;YourModel&gt;("YourIndex")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多