2010-02-05 8 views
36

quiero hacer algo como esto:¿Puedo tener una variable de conteo creciente en LINQ?

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

pero me da un error que me dice que el contador es de sólo lectura. ¿Hay alguna manera de hacer algo similar a esto sin declarar una variable fuera de la consulta?

Básicamente, solo quiero mostrar una columna de conteo/índice en LINQPad (lo cual es increíble, por cierto), lo que significa que no puedo declarar el contador antes de tiempo.

Respuesta

83

En lugar de utilizar los efectos secundarios, utilice la sobrecarga de Select que tiene un índice:

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

Usted podía hacerlo utilizando efectos secundarios, pero no de la manera que ha intentado:

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

Sin embargo, no recomendaría esto.

6

Si realmente quiere que sea un contador, y no sólo un índice, a continuación, sólo hay que mover la declaración contador de fuera de la expresión LINQ

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

Otra respuesta desaconseja esto. http://stackoverflow.com/a/2209014/7724 – bzlm

Cuestiones relacionadas