2010-05-07 5 views
24

Jak wybrać górne n wierszy z datatable/widok danych w ASP.NET? Obecnie używam następującego kodu, przekazując tabelę i liczbę wierszy, aby uzyskać rekordy. Czy istnieje lepszy sposób?Jak wybrać górne n wierszy z datatable/widok danych w 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

Czy nadal szuka zadowalającej odpowiedzi na zapytania? W przeciwnym razie możesz wskazać tę, która spełnia twoje oczekiwania. – Kangkan

Odpowiedz

34

W ramach 3.5, dt.Rows.Cast<System.Data.DataRow>().Take(n)

Inaczej sposób wymienić

+0

+1 bardzo dobry sposób podoba mi się to – Devjosh

+1

To nadal pobiera wszystkie dane z bazy danych. Ograniczenie liczby wierszy w zapytaniu może poprawić wydajność, a jednocześnie uniknąć niepotrzebnego ładowania danych i użycia pamięci. – Kangkan

3

Można zmodyfikować zapytanie. Jeśli korzystasz z SQL Server z tyłu, możesz użyć zapytania Select top n dla takiej potrzeby. Obecne narzędzia pobierają całe dane z bazy danych. Wybór tylko wymaganej liczby rzędów daje również zwiększenie wydajności.

22

Właśnie użyłem odpowiedzi Midhata, ale na końcu dodałem CopyToDataTable().

Poniższy kod jest rozszerzeniem odpowiedzi, której użyłem do szybkiego włączenia niektórych stronicowania.

int pageNum = 1; 
int pageSize = 25; 

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

Ten jest dobry do przywoływania. – Kangkan

+0

Jeśli powiązamy to z datagridview, akcja aktualizacji nie będzie działać poprawnie. – 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

Należy rozważyć umieszczenie niektórych informacji na temat swojej odpowiedzi, a nie tylko opublikowanie kodu. Staramy się dostarczać nie tylko "poprawki", ale także pomagać ludziom w nauce. Powinieneś wyjaśnić, co było nie tak w oryginalnym kodzie, co zrobiłeś inaczej i dlaczego twoja zmiana (y) zadziałała. –