C# - 2个DataTable列到Dictionary - Distinct Value

时间:2017-08-16 11:21:57

标签: c# dictionary datatable

我有一个文本文件列表,我正在阅读每个文本文件并在分割选项的帮助下创建一个包含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中获取不同的值?

提前致谢。

2 个答案:

答案 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);