我有一个String []列表,我试图使用LINQ将其转换为数据集/数据表。 我将文本文件解析为列表,其中第一行有4列,其他行有与列关联的数据。
所有内容都以列表中的数组形式出现。
List [10]其中List [0]有字符串[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属性。
有人可以建议这种实施的简单而有效的方法吗?
答案 0 :(得分:2)
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<TKey,TValue>.Select()
传递lambda一系列KeyValuePair<TKey, TValue>
。不同的阶级,不同的行为。