Linq查询到字典抛出System.ArgumentException:已添加具有相同键的项

时间:2013-05-21 13:33:07

标签: c# linq

我有以下LINQ查询,我用它来查询数据表并填充字典,但它不断抛出错误:

  

System.ArgumentException:具有相同键的项已经存在   加入。

我是LINQ的新手,无法弄清楚写这个的正确方法。

有人可以帮忙吗?

var neworderGroupDict = (from m in KMVData.AsEnumerable()
                         select new
                         {
                           datakey = m.Field<string>("OrderNumber"),
                           datavalue = m.Field<int>("OrderGroup")
                         }).Distinct().ToDictionary(n => n.datakey, n => n.datavalue);

2 个答案:

答案 0 :(得分:11)

这意味着您的数据密钥(在这种情况下,OrderNumberOrderGroup的组合)不是唯一的。发生这种情况是因为.Distinct()不会在没有IEqualityComparer类型的情况下过滤重复项。

修改:

修复该问题并保留OrderNumber的所有数据值的一种方法是先将其分组,然后将其转换为字典:

var neworderGroupDict = (from m in KMVData.AsEnumerable()
                         select new
                         {
                             datakey = m.Field<string>("OrderNumber"),
                             datavalue = m.Field<int>("OrderGroup")
                         }).GroupBy(x => x.datakey)
                         .ToDictionary(g => g.Key, g => g.ToList());

答案 1 :(得分:0)

尝试MoreLinqDistinctBy。 然后你可以毫无问题地使用ToDictionary

相关问题