2012-01-13 12 views
6

私のアプリでは、一部の計算にDataTableを使用しています。最初の行を除くすべての行を繰り返す必要があります。出来ますか?DataTable - foreach Row、EXCEPT FIRST ONE

DataTable dt; 

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

答えて

8

もOKですが、場合には、あなたは、LINQを使用したくありません。テーブルの行のインデックスを確認してください:

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

また、 "最初の"行はデータテーブルのソート定義に依存していると思うので注意が必要です。最終的に –

+0

はLINQと一緒に行かないことに決めましたので、私はあなたの答えを使用しました。回答ありがとうございました。 – user1080533

17

LINQはあなたの友達です:

何かのように

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

DataTable.Rowsので、ここで必要とされるCast()への呼び出しは非ジェネリックIEnumerableを実装し、LINQの拡張メソッドは、のためにのみ利用可能ですIEnumerable<T>

また別のオプションがあります。

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

おかげで:)それ – user1080533

+0

ああ、ただ一つのこと... .SKIP(0)があってはならないための正しい構文を見つけるcouldntの? – user1080533

+2

いいえ、 'Skip'は無視する項目の数を取るので、そうしてはいけません。 – Nuffin

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