私はRavenDbでデータのバックエンドデータ操作をたくさん行っています(ウェブサイトのクラッドではありません)。基本的に同じスキップ/テイク クエリを実行するためのメソッドが多数散在していますが、パラメーターは異なります。私が望むことの多くは単純です: このクエリに一致するデータベース内の foreach ドキュメントに対して、このアクションを実行します。
小さなヘルパーを作成しましたが、それにセレクターを適用する方法がわかりません。たとえば、私の最終目標は次のように書くことです。
MyDocStore.ForEach<Users>(
x => x.Where(u => u.LastName == "Smith").OrderBy( u => u.FirstName),
x => Console.WriteLine( "{0}", x.FirstName),
take: 12);
これが私がこれまでに持っているものです:
public static class RavenHelper
{
public static void ForEach<TSource>(
this IDocumentStore documentStore,
Func<TSource, IEnumerable<TSource>> selector,
Action<TSource> action,
int take = 128)
{
var skip = 0;
while( true )
{
using( var session = documentStore.OpenSession() )
{
var list = session.Query<TSource>();
// How do I apply more selectors?
var result = list.Take( take ).Skip( skip ).ToList();
if( !result.Any() )
{
return;
}
foreach( var il in result )
{
action(il);
}
skip += take;
}
}
}
}