2010-05-07 49 views
24

如何從ASP.NET中的數據表/數據視圖中選擇前n行?目前我正在使用下面的代碼,傳遞表和行數來獲取記錄。有沒有更好的辦法?如何從ASP.NET中的數據表/數據視圖中選擇前n行

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

你還在尋找適合您的查詢一個滿意的答案?否則,你可能會指出符合你期望的那個。 – Kangkan 2010-06-01 08:27:41

回答

34

在框架3.5,dt.Rows.Cast<System.Data.DataRow>().Take(n)

否則你提到

+0

+1很好的方式我喜歡這個 – Devjosh 2012-12-28 10:55:24

+1

這仍然從數據庫中獲取所有數據。限制查詢中的行數可以提高性能,同時避免不必要的數據加載和內存使用。 – Kangkan 2013-04-05 12:41:29

3

的方式你可以修改查詢。如果您在後面使用SQL Server,則可以使用Select top n查詢來滿足此類需求。當前實現從數據庫中獲取整個數據。只選擇所需的行數也可以提高性能。

22

我剛使用了Midhat的答案,但在最後加上了CopyToDataTable()

以下代碼是我用來快速啓用某些分頁的答案的擴展。

int pageNum = 1; 
int pageSize = 25; 

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

這是一個很好的分頁。 – Kangkan 2013-04-05 12:42:09

+0

如果我們將此綁定到datagridview,那麼更新操作將無法正常工作。 – Thunder 2014-05-07 09:37:56

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

請考慮包括一些關於您的答案的信息,而不是簡單地發佈代碼。我們嘗試提供的不僅僅是「修復」,而是幫助人們學習。你應該解釋原始代碼中的錯誤,你做了什麼不同,以及爲什麼你的改變起作用。 – 2015-01-01 00:08:29

相關問題