2012-01-13 20 views
6

Tôi đang sử dụng một số DataTable cho một số tính toán trong ứng dụng của mình. Tôi cần phải làm các iterate trough tất cả các hàng ngoại trừ một trong những đầu tiên. Có thể không?DataTable - foreach Row, EXCEPT FIRST ONE

Cái gì như:

DataTable dt; 

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

Trả lời

8

Ok bạn có câu trả lời của bạn, nhưng trong trường hợp bạn không muốn sử dụng LINQ. Kiểm tra chỉ mục của hàng trong bảng:

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

bạn cũng nên cẩn thận cos Tôi nghĩ rằng hàng "đầu tiên" phụ thuộc vào định nghĩa sắp xếp dữ liệu của bạn. –

+0

cuối cùng quyết định không đi với LINQ, vì vậy tôi đã sử dụng câu trả lời của bạn. Cảm ơn tất cả các bạn đã trả lời. – user1080533

17

LINQ là bạn của bạn:

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

Các cuộc gọi đến Cast() được yêu cầu ở đây từ DataTable.Rows thực hiện các phi generic IEnumerable, và phương pháp khuyến nông LINQ của chỉ có sẵn cho IEnumerable<T>

Bạn cũng có một tùy chọn khác:

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

cảm ơn :) không thể tìm thấy cú pháp chính xác cho nó – user1080533

+0

oh, chỉ một điều ... không nên có .Skip (0)? – user1080533

+2

Không, không nên, vì 'Bỏ qua 'lấy số mục cần bỏ qua. – Nuffin

2

Dưới đây là một cách nhanh chóng và dơ bẩn

DataTable dt; 

bool isFirst = true; 

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

Damn Lester, bây giờ tôi trông giống như một noob. – Matthew