【发布时间】:2019-08-29 20:38:31
【问题描述】:
我正在尝试从 DataSet 中的 DataTable 检索数据并将其存储到数组中。
以前,我只是使用以下代码从 DataTable 中检索数据并将其存储到数组中。
var stringArr = DtTable.AsEnumerable().Select(r => r.Field<string>("ExampleId")).ToArray();
它奏效了。所以我决定修改它以像这样访问 DataSet
var stringArr = DtSet.Tables["Results"].TableName.AsEnumerable().Select(r => r.Field<string>("ExampleId")).ToArray();
我现在收到以下错误消息,不确定如何修复
错误 CS1929 'char' 不包含'Field' 的定义,并且最佳扩展方法重载'DataRowExtensions.Field(DataRow, string)' 需要'DataRow 类型的接收器
【问题讨论】:
-
DataTable(根本不需要存储在 DataSet 中)是一个完全可用的容器 - 为什么要移动它?
-
TableName 不应在链中。它以字符串形式返回表的名称。可枚举的迭代字符
-
是的,我认为您会发现列表更易于使用。但是,另一个问题......在您的第一个示例中,
DtTable是否与第二个示例中的DtSet.Tables["Results"]相同? -
在你的第二个例子中,如果你取出
.TableName会发生什么? -
你能设置和命中断点吗?我很想知道这条线给了你什么:
var myTable = DtSet.Tables["Results"];它应该给你一个与DtTable相同的数据表。如果不是,那么DtSet.Tables["Results"]有问题。假设 DtSet.Tables["Results"] 是有效的,下面 Gwinn 的答案应该是正确的。