2010-05-07 23 views
24

ASP.NET'teki bir datatable/dataview'den en üstteki n satırları nasıl seçilir? Şu anda aşağıdaki kodu kullanıyorum, kayıtları almak için tabloyu ve satır sayısını iletiyorum. Daha iyi bir yolu var mı? dt.Rows.Cast<System.Data.DataRow>().Take(n)ASP.NET'te bir datatable/dataview'den en üstteki n satırları nasıl seçilir

çerçevesinde 3.5 olarak

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

hala sorgusu için tatmin edici bir cevap arıyorsunuz? Aksi takdirde, beklentinizi karşılayanı belirtebilirsiniz. – Kangkan

cevap

34

, Aksi yolu Sen sorguyu değiştirebilir

+0

+1 oldukça iyi bir şekilde bunu beğendim – Devjosh

+1

Bu hala veritabanındaki tüm verileri getir. Sorgudaki satırlardan hiçbirini sınırlamak, verilerin ve bellek kullanımının gerekli olmayan şekilde yüklenmesini önlerken performansı artırabilir. – Kangkan

3

bahsetti. SQL Server'ı arka tarafta kullanıyorsanız, bu tür bir gereksinim için Select top n sorgusunu kullanabilirsiniz. Mevcut uygulamalar, tüm verileri veritabanından alır. Sadece gereken sayıda satırın seçilmesi size bir performans artışı sağlayacaktır.

22

Ben sadece Midhat'ın cevabını kullandım ama sonuna kadar CopyToDataTable() ekledim.

Aşağıdaki kod, bazı çağrıları hızlı bir şekilde etkinleştirmek için kullandığım yanıtın bir uzantısıdır.

int pageNum = 1; 
int pageSize = 25; 

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

Bu, sayfalama için iyidir. – Kangkan

+0

Bunu bir datagridview öğesine bağlarsak, bir güncelleme eylemi düzgün şekilde çalışmayacaktır. – 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

Lütfen sadece kod yayınlamak yerine cevabınızla ilgili bazı bilgileri eklemeyi düşünün. Sadece 'düzeltmeleri' sağlamaya çalışmayız, ancak insanların öğrenmesine yardımcı oluruz. Orijinal kodda neyin yanlış olduğunu, ne yaptığınızı ve niçin değişiklik yaptığınızı açıklamalısınız. –

İlgili konular