如何从C#中的列表中删除非重复项

时间:2011-05-25 17:05:49

标签: c# linq

我想做与here

相反的事情

我有一个列表,我知道如何删除重复项。但是我希望有一个选项,用户可以选择要保留的副本。一些查询问题我可以有一个只显示重复项的列表。类似的东西:

让我们说清单是:

  

“tom”“bob”“Frank”“bob”“Lacey”“Frank”

我知道如果我使用不同的方法,我会得到:

  

“tom”“bob”“Frank”“Lacey”

我不知道我必须使用什么方法来获取:

  

“bob”“bob”“frank”“frank”

或获得

  

“bob”“frank”

因为那些是重复的。

2 个答案:

答案 0 :(得分:22)

您可以使用GroupBy过滤掉仅出现一次的项目,然后将其余项目展平回列表:

var resultList = list.GroupBy(x => x)
                     .Where(g => g.Count() > 1)
                     .SelectMany(g => g)
                     .ToList();

答案 1 :(得分:1)

我需要通过特定属性对它们进行比较,之前我只是将您的查询BrokenGlass修改为

var resultList = itemsThatNeedToBeAdded.GroupBy(x => x.property1)
                     .Where(g => g.Count() > 1 )
                     .SelectMany(g => g)
                     .ToList();