EDIT
Немного неправильно прочитал вопрос. Этот код даст вам последовательные элементы
public static IEnumerable<Pair<T,T>> GroupIntoConsequetive(this IEnumerable<T> enumerable) {
using ( var e = enumerable.GetEnumerator() ) {
if ( !e.MoveNext() ) {
yield break;
}
var last = e.Current;
while ( e.MoveNext() ) {
yield return new Pair<T,T>(last, e.Current);
last = e.Current;
}
}
}
Я не уверен, что есть способ по умолчанию, но написание метода расширения для этого не должно быть трудным. Я предполагаю, что есть простая реализация Pair
public static IEnumerable<Pair<T,T>> Window(this IEnumerable<T> enumerable) {
using ( var e = enumerable.GetEnumerator() ) {
while ( e.MoveNext() ) {
var first = e.Current;
if ( !e.MoveNext() ) {
throw new InvalidOperationException("Need even number");
}
var second = e.Current;
yield return new Pair<T,T>(first,second);
}
}
}
С окном вы можете получить желаемое поведение со следующим
var col = GetQueryableItem();
col.Window().Select(pair => method1(pair.First, pair.Second));
Быстрая и грязная пара реализации
public struct Pair<T1,T2> {
public readonly T1 First;
public readonly T2 Second;
public Pair(T1 first, T2 second) {
First = first;
Second = second;
}
}