2016-04-22 5 views
-1

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

[email protected] 
[email protected] 

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

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); 
} 

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

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

+1

'Список dbNames = myDT.AsEnumerable() Выбрать (n => n.Field ("Name")) ToList();..' – Plutonix

ответ

2

Ошибка говорит, что вы не можете пройти через объект 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(); 
2

попробовать что-то вроде этого:

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

Вы имеете в виду "row.Item (0)" вместо «д-р .Item (0) "правильно? –

+0

Это работает (компилируется, в любом случае): emailAddresses.Add (dr [0] .ToString()); –

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^