我看到很多复杂的例子用于转换具有多成员行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;也是,但这也激起了编译器的愤怒。
答案 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的情况下返回空字符串。