static IEnumerable <QueryResultItem <T> > GenerateCore <T>(QueryContext context, T seed, Func <T, IQuery <T> > generator) { yield return(QueryResultItem.Create(context, seed)); var current = seed; while (true) { foreach (var next in generator(current).GetResult(context)) { yield return(next); current = next.Value; context = next.Context; } } }
public static IQuery <T> ToQuery <T>(this IEnumerable <T> items) => Create(context => QueryResult.Create(from item in items select QueryResultItem.Create(context, item)));
public static QueryResult <T> Singleton <T>(QueryContext context, T value) => Singleton(QueryResultItem.Create(context, value));
public static QueryResult <T> Singleton <T>(QueryResultItem <T> item) => new QueryResult <T>(new[] { item });
static IEnumerable <QueryResultItem <TResult> > SelectManyIterator <T1, T2, TResult>(QueryContext context, QueryResult <T1> xs, Func <T1, IQuery <T2> > f, Func <T1, T2, TResult> g) => from x in xs from result in f(x.Value).GetResult(x.Context) select QueryResultItem.Create(result.Context, g(x, result.Value));