-1

我在这里看到了很多用于转换具有多个成员行的 DataTable 的复杂示例,但在我的情况下,查询只是从表中返回一列,即 0..N 个字符串/varchars,例如:

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”附加到“in UnitReportPairEmailValsDT”,但这也激起了编译器的愤怒。

4

3 回答 3

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();
于 2016-04-22T17:10:17.523 回答
2

尝试这样的事情:

List<String> emailAddresses = new List<string>();
foreach (DataRow row in UnitReportPairEmailValsDT.Rows)
{
    emailAddresses.Add(row.Item(0));
}
于 2016-04-22T17:15:34.277 回答
1

假设 dt 是您的数据表,然后使用 Linq: dt.Rows.Select(x=> x[0]+"").ToList() 将为您提供列表。使用 Select(x=>xToString()) 时要小心,因为如果列值为空,它很容易出错。x[0]+"" 确保在 null 的情况下返回空字符串。

于 2016-04-22T17:39:40.620 回答