【问题标题】:List Array to DataTable将数组列表到 DataTable
【发布时间】:2017-06-04 15:57:05
【问题描述】:

我有一个字符串 [] 列表,我正在尝试使用 LINQ 将其转换为数据集/数据表。 我将文本文件解析为列表,其中第一行有 4 列,其他有与列关联的数据。

所有内容都以数组形式出现在列表中。

List[10] 其中 List [0] 有 string[4] 个项目。

List<string[]> list = File.ReadLines(s)
    .Select(r => r.TrimEnd('#'))
    .Select(line => line.Split(';'))
    .ToList();

DataTable table = new DataTable();

table.Columns.AddRange(list.First().Select(r => new DataColumn(r.Value)).ToArray());

list = list.Skip(1).ToArray().ToList();

list.ForEach(r => table.Rows.Add(r.Select(c => c.Value).Cast<object>().ToArray()));

LINQ 不接受 Value 属性。

有人可以建议这种实现的简单有效的方法吗?

【问题讨论】:

  • “LINQ 不接受 Value 属性”——您能描述一下您自己对 LINQ 无法接受 Value 属性的感知主观体验吗?
  • 我在处理字典时使用了 value 属性。因此,如果第一行,则将列添加到表中。不知道如何在此处处理列表。请建议

标签: c# linq list datatable


【解决方案1】:

System.String 没有名为 Value 的属性。

如果您想为第一行中的每个项目创建一列,只需给它字符串:

table.Columns.AddRange(list.First().Select(r => new DataColumn(r)).ToArray());

//  You don't need ToArray() here. 
list = list.Skip(1).ToList();

//  Get rid of Value in this line too, and you don't need 
//  .Select(c => c) either -- that's a no-op so leave it out.
list.ForEach(row => table.Rows.Add(row.Cast<object>().ToArray()));

这里没有字典。 list.First() 是一个字符串数组。当您在数组上调用 Select 时,它只是将数组中的每个项目依次传递给 lambda。

Dictionary&lt;TKey,TValue&gt;.Select() 向 lambda 传递一系列 KeyValuePair&lt;TKey, TValue&gt;。不同的阶级,不同的行为。

【讨论】:

  • 谢谢,它将第一行添加为列.. 我如何使用 List list.ForEach(r => table.Rows.Add(r.Select(c = > c.Value).Cast().ToArray()));
  • @user1046415 我更新了,但想一想:如果第一个问题的唯一问题是Value 不属于那里,那么您应该先尝试另一行什么?他们都从同一个列表中选择字符串数组中的项目。
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多