この質問のバリエーションが以前に(私によってさえ)尋ねられたことは知っていますが、これについてはまだ1つか2つ理解していません...
これを行うことで、128のデフォルト設定よりも多くのドキュメントを取得できることが私の理解でした:
session.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue;
また、WHERE 句は Func ではなく ExpressionTree にする必要があることを学びました。これにより、Enumerable ではなく Queryable として扱われます。だから私はこれがうまくいくはずだと思った:
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"
}