Я знаю, что варианты этого вопроса задавались раньше (даже мной), но я до сих пор ничего не понимаю об этом...
Насколько я понял, можно было получить больше документов, чем значение по умолчанию 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() в запросе. Это правильно? Если нет, то как следует сделать это?
Для моего приложения мне нужно получить тысячи документов (в них очень мало данных). Мы сохраняем эти документы в памяти и используются в качестве источника данных для диаграмм.
** РЕДАКТИРОВАТЬ **
Я попробовал использовать int.MaxValue в своем методе Take():
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"
}