private static ChainStatus Pipeline <TKey, TElement, TResult>(Grouping <TKey, TElement> lastGrouping, Func <TKey, IEnumerable <TElement>, TResult> resultSelector, Chain <TResult> chain) { var state = ChainStatus.Flow; Grouping <TKey, TElement> g = lastGrouping; if (g != null) { do { g = g._next; state = chain.ProcessNext(resultSelector(g.Key, g.GetEfficientList(true))); if (state.IsStopped()) { break; } }while (g != lastGrouping); } return(state); }