2010-05-07 17 views
24

Come selezionare le prime n righe da un datatable/dataview in ASP.NET? Attualmente sto usando il seguente codice, passando la tabella e il numero di righe per ottenere i record. C'è un modo migliore?Come selezionare le prime n righe da un datatable/dataview in ASP.NET

public DataTable SelectTopDataRow(DataTable dt, int count) 
{ 
    DataTable dtn = dt.Clone(); 
    for (int i = 0; i < count; i++) 
    { 
     dtn.ImportRow(dt.Rows[i]); 
    } 

    return dtn; 
} 
+2

Sei ancora alla ricerca di una risposta soddisfacente per la vostra ricerca? Altrimenti, puoi indicare quello che soddisfa le tue aspettative. – Kangkan

risposta

34

Nel quadro 3.5, dt.Rows.Cast<System.Data.DataRow>().Take(n)

In caso contrario, il modo in cui voi hanno citato

+0

+1 mi piace molto questo – Devjosh

+1

Questo recupera ancora tutti i dati dal database. Limitare il numero di righe nella query può migliorare le prestazioni evitando il caricamento non necessario dei dati e l'utilizzo della memoria. – Kangkan

3

Si potrebbe modificare la query. Se si utilizza SQL Server sul retro, è possibile utilizzare la query Select top n per tale necessità. Gli attuali attrezzi prelevano tutti i dati dal database. Selezionando solo il numero richiesto di righe si otterrà anche un aumento delle prestazioni.

22

Ho appena usato la risposta di Midhat ma ho aggiunto CopyToDataTable() alla fine.

Il codice seguente è un'estensione della risposta che ho utilizzato per abilitare rapidamente alcune chiamate.

int pageNum = 1; 
int pageSize = 25; 

DataTable dtPage = dt.Rows.Cast<System.Data.DataRow>().Skip((pageNum - 1) * pageSize).Take(pageSize).CopyToDataTable(); 
+0

Questo è utile per il paging. – Kangkan

+0

Se lo associamo a una vista datagrid, un'azione di aggiornamento non funzionerà correttamente. – Thunder

18
myDataTable.AsEnumerable().Take(5).CopyToDataTable() 
0
public DataTable TopDataRow(DataTable dt, int count) 
    { 
     DataTable dtn = dt.Clone(); 
     int i = 0; 
     foreach (DataRow row in dt.Rows) 
     { 
      if (i < count) 
      { 
       dtn.ImportRow(row); 
       i++; 
      } 
      if (i > count) 
       break; 
     } 
     return dtn; 
    } 
+2

Si prega di prendere in considerazione l'inclusione di alcune informazioni sulla risposta, piuttosto che la semplice pubblicazione del codice. Cerchiamo di fornire non solo "correzioni", ma aiutare le persone a imparare. Dovresti spiegare cosa c'era di sbagliato nel codice originale, cosa hai fatto in modo diverso e perché le tue modifiche hanno funzionato. –

Problemi correlati