如何在对象列表中找到重复项
我们如何在对象列表中找到重复项?
在上述代码中,我猜测条件`Where(g => g.Count() >= 1)`存在错误,它会返回所有具有一个或多个项的组(实际上,所有组都至少有一个项,所以这个条件总是为真)。如果你想要只获取重复项,应该是`Where(g => g.Count() > 1)`。所以结果代码应该是:
var dups = ListItems.GroupBy(i => new { i.Value, i.Code }) .Where(g => g.Count() > 1) .Select(g => new { Length = g.Key.Value, Label = g.Key.Code, Count = g.Count() });
通过这种方式,在`dups`中你将会有多于一个项、具有重复的`Value`和`Code`的组。
我认为最好在`Where`之前调用`Select`,因为现在你计算了两次组的项数,一次是在`Where`中用于检查条件,一次是在`Select`中用于存储计数。如果你在`Select`之后调用`Where`,你将能够使用已存储的组计数的值进行过滤,像这样:
var dups = ListItems.GroupBy(i => new { i.Value, i.Code }) .Select(g => new { Length = g.Key.Value, Label = g.Key.Code, Count = g.Count() }) .Where(g => g.Count > 1);