2011-08-25 16 views
5

Supponiamo:LINQ elemento di proiezione

var a = SomeCollection.OrderBy(...) 
       .Select(f => new MyType 
           { 
            counter = ? //I want counter value, so what first 
               //object have counter=1, second counter=2 
               //and so on 
            a=f.sometthing, 
            ... 
           }); 

Come faccio a impostare questo valore del contatore? O devo continuare a ripetere iterate a?

risposta

8

Utilizzare il sovraccarico di Select che fornisce l'indice basato su 0 dell'elemento corrente.

.Select((item, index) => new MyType 
      { 
       counter = index + 1, 
       a = item.Something 
+1

Questo sovraccarico è documentato all'indirizzo http://msdn.microsoft.com/en-us/library/bb534869.aspx – Reddog

+0

@Reddog, grazie, ho aggiunto il collegamento alla risposta. –

+0

questo non funziona in linq alle entità, anche se – ren

3

semplicemente catturare una variabile:

int index = 1; 

var a = SomeCollection.OrderBy(...) 
     .Select(x => new MyType { counter = index++; }); 

Il contatore viene incrementato ogni iterazione come viene chiamato.

+0

questo non funziona con linq alle entità sia – ren

Problemi correlati