如何使用单列 DataTable 的结果填充通用字符串列表?

How can I populate a generic list of string with the results from a single-column DataTable?

我看到很多关于转换具有多个成员行的 DataTable 的复杂示例 here 但在我的例子中,查询只是 returns 来自 table 的一列,即就是说0..Nstrings/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' 不包含 public 定义'GetEnumerator'")

我也尝试将“.AsEnumerable”附加到 "in UnitReportPairEmailValsDT",但这也激怒了编译器。

错误说你不能遍历 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 是您的数据 table 然后使用 Linq: dt.Rows.Select(x=> x[0]+"").ToList() 会给你列表。请注意使用 Select(x=>xToString()),因为如果列值为 null,它很容易出错。 x[0]+"" 确保在 null 的情况下返回空字符串。