2012-01-13 22 views
6

मैं अपने अनुप्रयोग में कुछ गणना के लिए एक DataTable उपयोग कर रहा हूँ। मुझे पहले पंक्तियों को छोड़कर सभी पंक्तियों को फिर से करने की जरूरत है। क्या यह संभव है?DataTable - foreach पंक्ति, को छोड़कर सबसे पहले एक

कुछ की तरह:

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

आपको भी सावधान रहना चाहिए क्योंकि मुझे लगता है कि "पहली" पंक्ति आपके डेटाटेबल की सॉर्टिंग परिभाषा पर निर्भर करती है। अंत में –

+0

ने LINQ के साथ नहीं जाने का फैसला किया, इसलिए मैंने आपका जवाब उपयोग किया। प्रतिक्रियाओं के लिए सभी को धन्यवाद। – user1080533

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

+0

ओह, बस एक बात ... वहाँ नहीं .Skip होना चाहिए (0)? – user1080533

+2

नहीं, ऐसा नहीं होना चाहिए, क्योंकि 'छोड़ें' वस्तुओं को अनदेखा करने की संख्या लेता है। – 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