从IEnumerable中获取非独特元素

Ric*_*chK 13 c# linq

我有一个名为Item的类.Item有一个名为ItemCode的标识符属性,它是一个字符串.我想得到一个项目列表中所有非不同项目的列表.

例:

List<Item> itemList = new List<Item>()
{
   new Item("code1", "description1"),
   new Item("code2", "description2"),
   new Item("code2", "description3"),
};
Run Code Online (Sandbox Code Playgroud)

我想要一个包含最下面两个条目的列表

如果我使用

var distinctItems = itemsList.Distinct();
Run Code Online (Sandbox Code Playgroud)

我得到了很棒的不同物品清单,但我想要几乎与此相反.我可以从原始列表中减去不同的列表,但不包含所有重复,只包含每个重复的一个实例.

我有一个游戏,无法找到一个优雅的解决方案.任何指针或帮助将非常感激.谢谢!

我有3.5所以LINQ可用

mag*_*nus 18

我的看法:

var distinctItems = 
    from list in itemsList
    group list by list.ItemCode into grouped
    where grouped.Count() > 1
    select grouped;
Run Code Online (Sandbox Code Playgroud)


inc*_*lly 15

作为一种扩展方法:

public static IEnumerable<T> NonDistinct<T, TKey> (this IEnumerable<T> source, Func<T, TKey> keySelector)
{
   return source.GroupBy(keySelector).Where(g => g.Count() > 1).SelectMany(r => r);
}
Run Code Online (Sandbox Code Playgroud)