1

我有以下 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);
4

2 回答 2

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());
于 2013-05-21T13:34:48.390 回答
0

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

于 2013-05-21T13:37:30.570 回答