Puis-je avoir une variable de compte incrémentée dans LINQ?

Je veux faire quelque chose comme ça:

from a in stuff let counter = 0 select new { count = counter++, a.Name }; 

Mais j’ai une erreur en me disant que le compteur est en lecture seule. Est-il possible de faire quelque chose de similaire sans déclarer une variable en dehors de la requête?

Fondamentalement, je veux juste afficher une colonne count / index dans LINQPad (ce qui est génial, BTW), ce qui signifie que je ne peux pas déclarer de compteur à l’avance.

Plutôt que d’utiliser des effets secondaires, utilisez la surcharge de Select qui prend un index:

 stuff.Select((value, index) => new { index, value.Name }); 

Vous pouvez le faire en utilisant des effets secondaires, mais pas comme vous l’avez essayé:

 int counter = 0; var query = from a in stuff select new { count = counter++, a.Name }; 

Je déconseillerais fortement cela cependant.

Si vous voulez vraiment qu’il soit un compteur, et pas seulement un index, déplacez simplement la déclaration de compteur en dehors de l’expression LINQ

 var counter = 0; from a in stuff select new { count = counter++; a.Name };