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

C# Linq对字典的查询抛出System.ArgumentException:已添加具有相同键的项,c#,linq,C#,Linq,我使用以下LINQ查询来查询数据表和填充字典,但它不断抛出错误: System.ArgumentException:已创建具有相同密钥的项 补充说 我是LINQ的新手,不知道该怎么写 有人能帮忙吗 这意味着在这种情况下,OrderNumber和OrderGroup的组合不是唯一的。发生这种情况的原因是.Distinct在没有针对您的类型的IEqualityComparer的情况下不会筛选重复项 编辑: 修复此问题并保留OrderNumber的所有数据值的一种方法是首先分组,然后将其转换为字典:

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

System.ArgumentException:已创建具有相同密钥的项 补充说

我是LINQ的新手,不知道该怎么写

有人能帮忙吗


这意味着在这种情况下,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());

这意味着在这种情况下,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());
试着区别对待。 然后您就可以毫无问题地使用ToDictionary了。

请尝试区分。
然后您可以毫无问题地使用ToDictionary。

是否可能有两条订单号相同但订单组不同的记录?是否可能重复?否,订单号与组不同。是否可能有两条订单号相同但订单组不同的记录?可能重复?不,订单号与团队不同。这是订单号不起作用的原因,但不是问题的解决方案:p这是订单号不起作用的原因,但不是问题的解决方案:p