RavenDB ForEach ExtensionMethod抽象

时间:2012-04-10 21:19:45

标签: c# linq ravendb

我在RavenDb(不是网站crud)中对数据进行了大量的后端数据处理。我有很多方法散布在基本相同的跳过/接受查询,但使用不同的参数。我想要的很多东西很简单:db中匹配此查询的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;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

你需要:

      Expression<Func<TSource, bool>> selector, 

然后致电:

       .Where(selector)