Я делаю много данных для обработки данных в RavenDb (не сайт crud). У меня есть десятки методов, разбросанных вокруг, для того, чтобы делать по существу те же самые пропуски/запросы, но с разными параметрами. Большая часть того, что я хочу, просто: foreach document в db, который соответствует этому запросу, выполните это действие.RavenDB ForEach ExtensionMethod абстракция
Я создал небольшой помощник, но не могу понять, как применить к нему селектор. Например, моя конечная цель может быть, чтобы написать:
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;
}
}
}
}
Таким образом, ваш параметр 'selector' может быть различным вызовом расширения ее? Или вы будете только где и сортировать? –
Я хотел бы быть тем, что имеет смысл в типичном вызове linq. Например, вызов .Customize() часто используется для RavenDb. –