我们如何根据多个属性在对象列表中找到重复项?
如果列表包含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()
});
答案 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
中,您将拥有包含重复Value
和Code
的多个项目的组。
另外我认为如果你在Select
之前拨打Where
会更好,因为现在你要计算两次组中的项目数,在Where
内检查条件和内部{{} 1}}来存储计数。
如果您在Select
后拨打Where
,则可以使用存储的组计数值进行过滤,如下所示:
Select