Просуммировать элементы результата запроса

Он не определяет, что это индекс. Он всего лишь передает порядковый номер данного элемента.

Реализация примерно так выглядит:

C#Выделить код

1
2
3
4
5
6

IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TValue> collection, Func<TValue, int, TResult> selector)
{
   int i = 0;
   foreach (var value in source)
      yield return selector(value, i++);
}

То есть при обходе, скажем, бинарного дерева или графа - он все равно будет передавать "индекс".

Сгруппировать можно, но придется самому высчитывать текущие номера строки и столбца, исходя из значения i.