我知道这个问题的变体已经被问过(甚至是我),但我仍然不明白关于这个的一两件事......
据我了解,这样做可以检索比 128 默认设置更多的文档:
session.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue;
而且我了解到 WHERE 子句应该是 ExpressionTree 而不是 Func,因此它被视为 Queryable 而不是 Enumerable。所以我认为这应该有效:
public static List<T> GetObjectList<T>(Expression<Func<T, bool>> whereClause)
{
using (IDocumentSession session = GetRavenSession())
{
return session.Query<T>().Where(whereClause).ToList();
}
}
但是,这只返回 128 个文档。为什么?
注意,这里是调用上述方法的代码:
RavenDataAccessComponent.GetObjectList<Ccm>(x => x.TimeStamp > lastReadTime);
如果我添加 Take(n),那么我可以得到尽可能多的文档。例如,这将返回 200 个文档:
return session.Query<T>().Where(whereClause).Take(200).ToList();
基于所有这些,似乎检索数千个文档的适当方法是设置 MaxNumberOfRequestsPerSession 并在查询中使用 Take()。是对的吗?如果没有,应该怎么做?
对于我的应用程序,我需要检索数千个文档(其中的数据非常少)。我们将这些文档保存在内存中并用作图表的数据源。
** 编辑 **
我尝试在我的 Take() 中使用 int.MaxValue:
return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList();
然后返回 1024。啊。我如何获得超过 1024?
** 编辑 2 - 显示数据的示例文档 **
{
"Header_ID": 3525880,
"Sub_ID": "120403261139",
"TimeStamp": "2012-04-05T15:14:13.9870000",
"Equipment_ID": "PBG11A-CCM",
"AverageAbsorber1": "284.451",
"AverageAbsorber2": "108.442",
"AverageAbsorber3": "886.523",
"AverageAbsorber4": "176.773"
}