2010-02-05 11 views
36

Ich mag so etwas wie dies zu tun:Kann ich eine inkrementierende Zählvariable in LINQ haben?

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

Aber ich habe einen Fehler mir diesen Zähler zu sagen nur gelesen. Gibt es eine Möglichkeit, etwas Ähnliches zu tun, ohne eine Variable außerhalb der Abfrage zu deklarieren?

Im Grunde möchte ich nur eine Zähl-/Indexspalte in LINQPad anzeigen (was super ist, BTW), was bedeutet, dass ich Zähler nicht vor der Zeit deklarieren kann.

Antwort

83

Anstatt Nebenwirkungen verwendet wird, um die Überlastung von Select benutzen, die einen Index nimmt:

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

Sie konnte tun es Nebenwirkungen verwenden, aber nicht in der Art und Weise Sie versucht:

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

Ich würde jedoch dringend davon abraten.

6

Wenn Sie wollen, dass es wirklich ein Zähler, und nicht nur ein Index sein, dann bewegen Sie einfach den Zähler Erklärung außerhalb der Ausdruck LINQ

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

Eine andere Antwort auf diese ist dringend abzuraten. http://stackoverflow.com/a/2209014/7724 – bzlm

Verwandte Themen