2012-01-13 64 views
6

我正在使用DataTable進行一些計算。我需要通過除第一個以外的所有行進行迭代。可能嗎?DataTable - foreach Row,EXCEPT FIRST ONE

喜歡的東西:

DataTable dt; 

foreach (DataRow r in dt.Rows /*EXCEPT THE FIRST ONE*/) 
{ 
    //do something... 
} 

回答

8

好吧,你有你的答案,但如果你不想使用LINQ。檢查行的索引表中:

  foreach (DataRow row in m_dtMatrix.Rows) 
      { 
       if (m_dtMatrix.Rows.IndexOf(row) != 0) 
       { 
        ... 
       } 
      } 
+0

你也應該小心因爲我認爲「第一」行取決於你的數據表的排序定義。 – 2012-01-13 15:39:10

+0

最後決定不用LINQ去,所以我用你的答案。謝謝大家的迴應。 – user1080533 2012-01-14 12:49:08

17

LINQ是你的朋友:

DataTable dt; 
foreach (DataRow r in dt.Rows.Cast<DataRow>().Skip(1)) 
{ 
    //do something... 
} 

Cast()是因爲DataTable.Rows這裏所需要的呼叫實現了非泛型IEnumerable,和LINQ的擴展方法只適用於IEnumerable<T>

您還有其他選擇:

DataTable dt; 
foreach (DataRow r in dt.AsEnumerable().Skip(1)) 
{ 
    //do something... 
} 
+0

謝謝:)無法找到正確的語法,它 – user1080533 2012-01-13 15:28:12

+0

哦,只有一件事......應該有不.Skip(0)? – user1080533 2012-01-13 15:29:28

+2

不,不應該,因爲'Skip'需要忽略項目的數量。 – Nuffin 2012-01-13 15:30:59

2

這裏有一個快速和骯髒的

DataTable dt; 

bool isFirst = true; 

foreach (DataRow r in dt.Rows /*EXCEPT THE FIRST ONE*/) 
{ 
    if(isFirst) { 
     isFirst = false; 
     continue; 
    } 
    //do something... 
} 
+2

該死的萊斯特,現在我看起來像一個菜鳥。 – Matthew 2012-01-13 15:28:21