根据特定成员值在列表中查找重复项

时间:2013-08-14 14:31:33

标签: c# linq

如何根据特定值在列表中查找重复项目并将重复项目组合在一起?

如果我的项目具有相同的电子邮件地址,我希望将它们作为重复项收集,因为我在集合中使用电子邮件地址作为“主键”。并非所有值都在这些项目中相同。

例如:

var numberOfTestcasesWithDuplicates = 
                                 Customers.GroupBy(x => x.emailaddress).ToList();

会给我一组重复的项目,但后来我想将重复的项目收集到分组的集合中,我可以管理这些项目并查看哪些项目是重复的?

谢谢

2 个答案:

答案 0 :(得分:6)

也许您只想要拥有多个项目的群组?

var numberOfTestcasesWithDuplicates = Customers.GroupBy(x => x.emailaddress)
                                               .Where(x => x.Count() > 1)
                                               .ToList();

.Where(p => p.Count() > 1)将检查组成该组的项目数。

答案 1 :(得分:0)

  

如何根据特定值在列表中查找重复项目并将重复项目组合在一起?

听起来像GroupBy对我来说。您已经完成在问题中的代码中进行分组 - 您只需要使用结果。 GroupBy的结果是组的序列,其中每个组是一个键和一组共享该键的值。例如:

foreach (var group in Customers.GroupBy(x => x.emailaddress))
{
    Console.WriteLine("Customers with email address {0}", group.Key);
    foreach (var customer in group)
    {
        Console.WriteLine("  {0}", customer.Name); // Or whatever
    }
}