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