2012-01-13 7 views
6

Sto utilizzando uno DataTable per alcuni calcoli nella mia app. Ho bisogno di fare l'iterate attraverso tutte le righe tranne la prima. È possibile?DataTable - foreach Row, EXCEPT FIRST ONE

Qualcosa di simile:

DataTable dt; 

foreach (DataRow r in dt.Rows /*EXCEPT THE FIRST ONE*/) 
{ 
    //do something... 
} 

risposta

8

Ok hai le tue risposte, ma nel caso in cui non avete intenzione di usare LINQ. Controllare l'indice della riga nella tabella:

  foreach (DataRow row in m_dtMatrix.Rows) 
      { 
       if (m_dtMatrix.Rows.IndexOf(row) != 0) 
       { 
        ... 
       } 
      } 
+0

anche tu dovresti fare attenzione perché penso che la "prima" riga dipenda dalla definizione di ordinamento del tuo datatable. –

+0

alla fine ha deciso di non usare LINQ, quindi ho usato la tua risposta. Grazie a tutti per le risposte. – user1080533

17

LINQ è tuo amico:

DataTable dt; 
foreach (DataRow r in dt.Rows.Cast<DataRow>().Skip(1)) 
{ 
    //do something... 
} 

La chiamata alla Cast() qui è necessaria in quanto DataTable.Rows implementa il non generico IEnumerable e metodi di estensione di LINQ sono disponibili solo per i IEnumerable<T>

Hai anche un'altra opzione:

DataTable dt; 
foreach (DataRow r in dt.AsEnumerable().Skip(1)) 
{ 
    //do something... 
} 
+0

grazie :) riusciva a trovare sintassi corretta per esso – user1080533

+0

oh, solo una cosa ... non dovrebbe esistere .Skip (0)? – user1080533

+2

No, non dovrebbe, poiché "Salta" prende il numero di elementi da ignorare. – Nuffin

2

Ecco un rapido e sporco

DataTable dt; 

bool isFirst = true; 

foreach (DataRow r in dt.Rows /*EXCEPT THE FIRST ONE*/) 
{ 
    if(isFirst) { 
     isFirst = false; 
     continue; 
    } 
    //do something... 
} 
+2

Damn Lester, ora sembro un noob. – Matthew