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

时间:2016-04-22 17:06:26

标签: c# foreach datatable generic-list asenumerable

我看到很多复杂的例子用于转换具有多成员行here的DataTable但在我的情况下,查询只返回表中的一列,也就是说0..N strings / 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);
}

...但它不会编译(&#34; foreach语句不能对类型&#39; System.Data.DataTable&#39;的变量进行操作,因为&#39; System.Data .DataTable&#39;不包含&#39; GetEnumerator&#39; &#34;)的公开定义

我尝试追加&#34; .AsEnumerable&#34; to&#34; in UnitReportPairEmailValsDT&#34;也是,但这也激起了编译器的愤怒。

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

尝试这样的事情:

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

答案 2 :(得分:1)

假设dt是你的数据表然后使用Linq: dt.Rows.Select(x =&gt; x [0] +“”)。ToList()会给你List。请注意使用Select(x =&gt; xToString()),因为如果列值为null,则容易出错。 x [0] +“”确保在返回null的情况下返回空字符串。