我需要找到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.
我做错了什么?
答案 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);
...