我知道这个问题的变种已经被问过(甚至由我),但我仍然不明白一件事或两个这个… 我的理解是,通过这样做,可以检索比128默认设置更多的文档: session.Advanced.MaxNumberOfRequestsPerSessi
我的理解是,通过这样做,可以检索比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. Argh。如何获得超过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" }默认情况下,Take(n)功能最多只能为1024。但是,您可以在Raven.Server.exe.config中更改此默认值:
<add key="Raven/MaxPageSize" value="5000"/>
有关详细信息,请参阅:http://ravendb.net/docs/intro/safe-by-default