在ravenDB中获取Count进行分页的最佳方法

时间:2011-08-17 13:05:44

标签: ravendb

我需要找到raven数据库中的文档数量,以便我可以正确地将文档分页。我有以下实现 -

public int Getcount<T>()
{
    IQueryable<T> queryable = from p in _session.Query<T>().Customize(x =>x.WaitForNonStaleResultsAsOfLastWrite())
    select p;
    return queryable.Count();
}

但是,如果计数太大,那么它会超时。

我尝试了常见问题解答中建议的方法 -

    public int GetCount<T>()
    {
        //IQueryable<T> queryable = from p in _session.Query<T>().Customize(x => x.WaitForNonStaleResultsAsOfLastWrite())
        //                          select p;
        //return queryable.Count();

        RavenQueryStatistics stats;
        var results = _session.Query<T>()
            .Statistics(out stats);

        return stats.TotalResults;
    }

这总是返回0.

我做错了什么?

2 个答案:

答案 0 :(得分:15)

stats.TotalResults为0,因为查询从未执行过。试试这个:

var results = _session
    .Query<T>()
    .Statistics(out stats)
    .Take(0)
    .ToArray();

答案 1 :(得分:4)

获取统计数据的奇怪语法也让我失望了。我可以看到为什么需要运行查询以填充统计对象,但语法有点冗长imo。

我已经编写了以下扩展方法,用于我的单元测试。它有助于保持代码简洁。

扩展方法

public static int QuickCount<T>(this IRavenQueryable<T> results)
{
    RavenQueryStatistics stats;
    results.Statistics(out stats).Take(0).ToArray();
    return stats.TotalResults;
}

单元测试

...
db.Query<T>().QuickCount().ShouldBeGreaterThan(128);
...