我有一个文本文件列表,我正在阅读每个文本文件并在分割选项的帮助下创建一个包含5列(无ID)的数据表(名称:tbl)。
此外,仅使用Column1和Column5创建数据表并将其转换为字典作为column1将是一个键,column5将是其值。
以下是代码:
string[] selectedColumns = new[] { "Column1", "Column5" };
DataTable dt = new DataView(tbl).ToTable(false, selectedColumns);
dict = dt.AsEnumerable().ToDictionary<DataRow, string, string>(row => row[0].ToString(),
row => row[1].ToString());
错误: $ exception {&#34;已经添加了具有相同键的项。&#34;} System.Exception {System.ArgumentException}
由于重复而产生错误。
dict = dt.AsEnumerable().Distinct().ToDictionary<DataRow, string, string>(row => row[0].ToString(),
row => row[1].ToString());
结果相同。
dict = dt.AsEnumerable().ToDictionary<DataRow, string, string>(row => row[0].ToString(),
row => row[1].ToString()).Distinct();
引发错误:错误1无法隐式转换类型&#39; System.Collections.Generic.IEnumerable&gt;&#39;到&#39; System.Collections.Generic.Dictionary&#39;。存在显式转换(您是否错过了演员?)
如何避免重复并仅在字典dict中获取不同的值?
提前致谢。
答案 0 :(得分:1)
可能你可以尝试这样的事情:
dict = dt.AsEnumerable().GroupBy(x=> x.<yourColumnName>)
.Select(group => group.First());
然后加载到字典中。
答案 1 :(得分:1)
如错误所述,您需要将其转换为Dictionary
试试这个
dict = dt.AsEnumerable().Select(row => new
{
attribute1_name = row.Field<string>(selectedColumns[0]),
attribute2_name = row.Field<string>(selectedColumns[1])
}).Distinct().ToDictionary(s => s.attribute1_name, s => s.attribute2_name);