DataTable - за всеки ред, ОСВЕН ПЪРВИЯ

Използвам DataTable за някои изчисления в моето приложение. Трябва да направя итерация през всички редове с изключение на първия. Възможно ли е?

Нещо като:

DataTable dt;

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

person user1080533    schedule 13.01.2012    source източник


Отговори (3)


Добре, получихте отговорите си, но в случай, че не искате да използвате linq. Проверете индекса на реда в таблицата:

            foreach (DataRow row in m_dtMatrix.Rows)
            {
                if (m_dtMatrix.Rows.IndexOf(row) != 0)
                {
                    ...
                }
            }
person Orkun Ozen    schedule 13.01.2012
comment
също трябва да внимавате, защото мисля, че първият ред зависи от дефиницията за сортиране на вашата таблица с данни. - person Orkun Ozen; 13.01.2012
comment
в крайна сметка реших да не използвам LINQ, затова използвах вашия отговор. Благодаря на всички за отговорите. - person user1080533; 14.01.2012
comment
Въпреки че това е приетият отговор (и валиден), проверката за всеки ред, който не е първи, не е идеална, пропускането на първия ред от @Adi е по-кратък, чист начин за това. - person Alan; 21.06.2018

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...
}
person Adi Lester    schedule 13.01.2012
comment
о, само едно нещо...не трябва ли да има .Skip(0)? - person user1080533; 13.01.2012
comment
Не, не трябва, тъй като Skip взема броя на елементите, които да се игнорират. - person Nuffin; 13.01.2012
comment
О, не знаех това. Благодаря отново. - person user1080533; 13.01.2012
comment
Какво пропускам - не виждам метод Skip в DataTable.Rows. - person Jay Riggs; 13.01.2012
comment
@JayRiggs Току-що забелязах, че DataTable.Rows връща негенерично IEnumerable, така че за да се използва LINQ, е необходимо извикване на Cast(). Актуализирах отговора си съответно. - person Adi Lester; 13.01.2012

Ето едно бързо и мръсно

DataTable dt;

bool isFirst = true;

foreach (DataRow r in dt.Rows /*EXCEPT THE FIRST ONE*/)
{
    if( isFirst ) {
        isFirst = false;
        continue;
    }
    //do something...
}
person Matthew    schedule 13.01.2012
comment
По дяволите Лестър, сега изглеждам като нуб. - person Matthew; 13.01.2012
comment
Правя това от години и никога не съм забелязвал метода Skip(). Дори не се чувствай зле. :) - person DevOhrion; 04.04.2019