我的情况是我有一个List<MyObject>
而MyObject
有一个属性ID
。我想从该列表中创建一个字典:
var myDic = MyList.ToDictionary(e => e.ID);
问题是有时我会有一些重复的ID。在这种情况下,我想将第一个项目存储到字典中并忽略其余项目,并在可能的情况下对跳过的项目进行某种通知。
现在我正在获取一个Exception,告诉我列表中有重复的键,但我不能/不想修改原始列表。有没有办法在不创建没有重复ID的新列表的情况下执行任务?
答案 0 :(得分:7)
var myDic = MyList.ToLookup(x => x.ID)
.ToDictionary(x => x.Key, x => x.First());
答案 1 :(得分:5)
首先按该属性对项目进行分组,然后您可以从该组中提取您想要的第一个/最后一个/随机/任意值。
var dictionary = list.GroupBy(item => item.ID)
.ToDictionary(group => group.Key, group => group.First());