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

Mar*_*rdi 1 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);
Run Code Online (Sandbox Code Playgroud)

gza*_*axx 11

这意味着您的数据密钥(在这种情况下是OrderNumber和的组合OrderGroup)不是唯一的.发生这种情况,因为在.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());
Run Code Online (Sandbox Code Playgroud)