2011-01-28 19 views
6

Ho un DataTable disponibile con me che contiene migliaia di righe. C'è una colonna chiamata EmpID che contiene '0' per alcune delle righe. Voglio rimuoverli dal mio DataTable corrente e voglio creare un nuovo DataTable corretto. Non posso andare riga per riga controllandolo poiché contiene un'enorme quantità di dati. Dammi un suggerimento per superare questo problema.Come rimuovere le righe dall'enorme tabella di dati senza iterarlo?

risposta

7

il modo migliore sarebbe quello di filtrare alla fonte (se possibile) - quindi se si sta creando da un db, esclude tutti i 0 valori nella query SQL se stesso utilizzando un dove

partenza. net 2.0, ms ha migliorato la logica di filtraggio sul datatable in larga misura. quindi se hai usato il dataview (sopra il tuo datatable) e hai aggiunto la clausola where e hai aggiunto alcuni indici di runtime su questo campo, ti darebbe i risultati desiderati senza eseguire il loop su tutti i record

+0

apprezzo la tua risposta per avermi dato l'idea di dataview. Grazie. Ci proverò e tornerò da te. – NayeemKhan

1

È possibile utilizzare DataTable.Select("EmpID <> 0"). Ciò restituirà una matrice di DataRows che è possibile creare il nuovo DataTable da se richiesto.

1

Non è possibile selezionare prima le righe con EmpID = 0 e quindi scorrere solo su queste?

 DataTable newTable = new DataTable(); 
     foreach (DataRow dr in oldTable.Select("EmpID = '0'")) { 
      newTable.Rows.Add(dr); 
      oldTable.Rows.Remove(dr); 
     } 
+0

Ho perso il fatto che volevi spostare le righe su un nuovo tavolo, ho aggiornato la risposta – Ozzy

0

Puoi provare

DataRow [] temp = table.Select ("EmpID = '0'");

foreach(DataRow dr in temp) 
    { 
    table.Rows.Remove(dr); 
    } 

table.acceptchanges();

Problemi correlati