我知道类似的问题之前已经被问过了(包括我自己),但是我仍然不理解其中一两件事...
我的理解是,通过这种方法可以检索到比默认设置的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"
}