从List <t>对象中获取所有重复项?</t>

时间:2015-02-15 23:55:37

标签: c# .net linq

我有一些LINQ代码(不幸的是不能亲自!)从列表对象中获取重复项。但是,原始列表中的重复项是这样的:

Item A
Item A
Item A
Item B
Item B
Item C
Item C
Item C
Item C

etc...

我想做的是扩展LINQ查询以获取所有这些重复实例,而不仅仅是重复对中的第一个实例,或三重奏。

获得此功能的理想查询是什么?

2 个答案:

答案 0 :(得分:5)

您可以对属性进行分组,并获取包含多个项目的组。例如:

List<IGrouping<Item>> duplicates =
  items.GroupBy(i => i.Name).Where(g => g.Count() > 1).ToList();

现在每个组都包含所有重复项。

答案 1 :(得分:0)

您也可以使用ToLookup方法执行相同操作:

var duplicates= Items.ToLookup(s => s).Where(g=>g.Count()>1);

如果您想查看GroupByToLookup之间的差异,建议您查看link以查看@JonSkeet的答案