2012-10-17 88 views
3

我有一個DataTable。我想根據DataTable中的行的Index/Row Number來選擇行。如何根據索引/行號從DataTable中選擇行?

下面假設是DataTable

---------------- --------------- 
| ID | Name | | Index/RowNo | 
---------------- --------------- 
| A001 | John | |  1  | 
| A002 | Foo | |  2  | 
| A003 | Rambo | |  3  | 
| A004 | Andy | |  4  | 
| ... | ... | |  5  | 
---------------- --------------- 

現在,我想選擇從上面所示DataTable使用標準說例如Index > 2,在在索引1,A001 | John這種情況下,第一個條目的行,也不會成爲部分結果爲DataTable。我怎樣纔能有效地做到這一點?

此外,我想要我的結果都以DataTableLinq的形式查詢結果。

我試圖做這樣的事情:

var result = dt.Select("RowNum > 1", ""); 

OR

var result = from row in dt.AsEnumerable() 
      where RowNum > 1 
      select row; 

回答

2
var result = table.AsEnumerable() 
        .Where((row, index) => index > 1) 
        .CopyToDataTable() 
5

您可以使用Enumerable.Skip即使因爲它DataTableIEnumerable<DataRow>

IEnumerable<DataRow> allButFirst = table.AsEnumerable().Skip(1); 

GET一個新的DataTable與:

DataTable tblAllButFirst = allButFirst.CopyToDataTable(); 

如果你的下一個問題是你如何利用只用行給出指標:

var allowedIndices = new[]{ 2, 4, 7, 8, 9, 10 }; 
DataTable tblAllowedRows = table.AsEnumerable() 
           .Where((r, i) => allowedIndices.Contains(i)) 
           .CopyToDataTable(); 
+0

+1有什麼能更快,比跳過第一個項目,並簡單地返回所有剩餘項目 –