我们如何在对象列表中找到重复项

时间:2016-01-05 20:36:29

标签: c# linq duplicates

我们如何根据多个属性在对象列表中找到重复项?

如果列表包含dupes,则不返回以下代码。

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()
                      });

1 个答案:

答案 0 :(得分:2)

我猜你在条件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中,您将拥有包含重复ValueCode的多个项目的组。

另外我认为如果你在Select之前拨打Where会更好,因为现在你要计算两次组中的项目数,在Where内检查条件和内部{{} 1}}来存储计数。

如果您在Select后拨打Where,则可以使用存储的组计数值进行过滤,如下所示:

Select