【问题标题】:How do I retrieve the data from a DataTable store in a DataSet and store it in an array? [closed]如何从 DataSet 中的 DataTable 存储中检索数据并将其存储在数组中? [关闭]
【发布时间】: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 的答案应该是正确的。

标签: c# datatable dataset


【解决方案1】:

问题是您在链中添加了TableName。

您基本上要求将TableName 转换为IEnumerable(返回IEnumerable&lt;char&gt;),并且对于您尝试调用的表名字符串的每个char .Field,这当然不会存在。

你需要写:


//Notice TableName being removed
var stringArr = DtSet.Tables["Results"].AsEnumerable().Select(r => r.Field<string>("ExampleId")).ToArray();

从链中删除TableName 将返回您需要的IEnumerable&lt;DataRow&gt;。

【讨论】:

  • 查看 OP 下的 cmets。我也建议过这个,但 OP 说他得到了一个空集。
  • 是的,当我尝试打印数据时,我现在得到一个空字符串。 ` foreach (var item in stringArr) { Console.WriteLine(stringArr); } `
  • 查看我最近的评论。这应该是正确的答案。如果不是,那么DtSet.Tables["Results"] 会给你一个空数据表。
  • 我以为问题是关于编译器错误,我在写答案时没有看到 cmets。 @pennyBoy您确定您的表“结果”包含任何数据并且该列“ExampleId”实际上有任何值吗?
  • 我会在另一篇文章中问另一个问题。但是,基本上我有两个课程。 A类,我创建3个数据表并将它们存储到我传递给B类的数据集中。在B类中,我将数据集从A复制到B中的新数据集中。然后我尝试检索表,将它们存储在一个数组并打印出结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
相关资源
最近更新 更多