Как можно заполнить общий список строк результатами из DataTable с одним столбцом?

Я вижу множество сложных примеров преобразования DataTable со строками из нескольких элементов, но в моем случае запрос просто возвращает один столбец из таблицы, то есть 0..N строк / вариантов, таких как:

bbfinaleofseem@wallacestevens.org
eyenoy@dunbar.com

Я думал, что-то вроде этого должно работать:

DataTable UnitReportPairEmailValsDT = new DataTable();
string qry = string.Format(SQL.UnitReportPairEmailQuery, unit, rptId);
UnitReportPairEmailValsDT = SQL.ExecuteSQLReturnDataTable(
    qry,
    CommandType.Text,
    null
    );

List<String> emailAddresses = new List<string>();
foreach (string emailaddr in UnitReportPairEmailValsDT)
{
    emailAddresses.Add(emailaddr);
}

... но он не будет компилироваться (" оператор foreach не может работать с переменными типа" System.Data.DataTable ", потому что" System.Data.DataTable "не содержит общедоступного определения для" GetEnumerator " ")

Я тоже пытался добавить ".AsEnumerable" в "в UnitReportPairEmailValsDT", но это также вызвало гнев компилятора.

3 ответа

Решение

Ошибка говорит, что вы не можете перебрать DataTable сам объект, вероятно, что вам нужно циклически DataRows,

Использовать этот.

foreach(DataRow row in UnitReportPairEmailValsDT.Rows)
{
     emailAddresses.Add(row["emailaddr"].ToString()); // assuming you have emailaddr column.
}

Другой вариант, использовать Linq

emailAddresses = UnitReportPairEmailValsDT
                         .AsEnumerable()
                         .Select(row=> row.Field<string>("emailaddr"))
                         .ToList();

Попробуйте что-то вроде этого:

List<String> emailAddresses = new List<string>();
foreach (DataRow row in UnitReportPairEmailValsDT.Rows)
{
    emailAddresses.Add(row.Item(0));
}

Предположим, что dt - это ваша таблица данных, тогда с помощью Linq: dt.Rows.Select(x=> x[0]+"").ToList() выдаст вам List. Остерегайтесь использования Select(x=>xToString()), так как он подвержен ошибкам, если значение столбца равно нулю. x[0]+"" гарантирует, что в случае нуля будет возвращена пустая строка.

Другие вопросы по тегам