web-dev-qa-db-fra.com

Puis-je avoir une variable de comptage 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 je reçois une erreur me disant que le compteur est en lecture seule. Existe-t-il un moyen de faire quelque chose de similaire à cela, 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 le compteur à l'avance.

49
Mike Pateras

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 pourriez le faire en utilisant des effets secondaires, mais pas de la manière que vous avez essayée:

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

Je déconseille cependant fortement cela.

110
Jon Skeet

Si vous voulez vraiment que ce 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 };
6
JaredPar

Ajoutez simplement deux variables ici NumberRow est pour ça

.Select((x,NumberRow) => new ViewModelArchiveOrder
                    {
                        NumberRow= NumberRow + 1,
                    })
0
saeed bagheri