1

私は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;
            }
        }
    }
}
4

1 に答える 1

2

必要なもの:

      Expression<Func<TSource, bool>> selector, 

そして、次のように呼び出します。

       .Where(selector)
于 2012-04-11T05:40:59.670 に答える