2013-02-05 11 views
8

Ho un DataTable sto popolando dalla tabella SQL con il seguente esempio colonneSelezione seconda serie di 20 riga dal DataTable

  • ID
  • Tipo
  • Valore

sto popolando il DataTable con righe che sono di un certo tipo. Voglio selezionare le righe 10-20 dalla mia conseguente DataTable:

Connect conn = new Connect(); 
SqlDataAdapter da = new SqlDataAdapter(SQL, conn.Connection()); 

//Creates data 
DataTable d = new DataTable(); 
da.Fill(d); 

DataRow[] result = d.Select(); 

Nel codice sopra ho omesso la SQL principale, e attualmente non ho selezionate per la mia matrice di DataRow. Non riesco a trovare un modo per fare riferimento ai numeri di riga.

Così, per esempio Cerco qualcosa di simile Select("rownum > X && rownum < Y")

Ho cercato qui, e una serie di altre risorse inutilmente. Qualsiasi indizio sarebbe davvero utile, o solo un semplice non possibile.

risposta

13

È sempre preferibile selezionare solo ciò che è necessario dal database (ad esempio utilizzando la clausola TOP o una funzione finestra come ROW_NUMBER) anziché filtrarlo in memoria.

Tuttavia, è possibile utilizzare Linq-To-DataSet e Enumerable.Skip + Enumerable.Take:

var rows = d.AsEnumerable() 
    .Skip(9).Take(11); // select rows 10-20 as desired (so you want 11 rows) 

Se si desidera una nuova DataTable dal risultato filtrato utilizzare CopyToDataTable, se si vuole un DataRow[] uso rows.ToArray().

+0

ho completamente essere d'accordo. Odio l'idea di farlo in memoria. Posso cambiarlo dopo, spero solo di farlo funzionare al momento. Darò questo andare. Leggendolo, non riesco a vedere un problema. Grazie! – DMckendrick

5

vorrei solo fare il comando 'prendere' e 'saltare' e mantenere le cose semplici:

d.Select().Skip(10).Take(10); // skips 10 rows, then selects ten after that. 

Questo sarebbe assumendo avete la Linq utilizzando set (usando System.Linq)

+0

Sto usando System.Linq. Grazie – DMckendrick

Problemi correlati