You want to transform the above collection of strings into a collection of anonymous objects that are easier to work on, so you need to write a query that operates on groups of three. To solve this problem, you can take advantage that the Select extension method has an overload that passes an index number to the selection function:

Your approach using an interator is fine too. It has an advantage – the approach that I showed creates more short-lived objects on the heap. Sometimes I am writing ad-hoq LINQ transforms for one reason or another, in which case I would use the above approach. If I were making a library that would be used by many people, I would optimize using an approach similar to yours.