我有以下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);
答案 0 :(得分: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());
答案 1 :(得分:0)
尝试MoreLinq的DistinctBy
。
然后你可以毫无问题地使用ToDictionary
。