c# - 在对象列表中查找对象数据重复项

标签 c# .net

使用 c# 3 和 .Net Framework 3.5,我有一个 Person 对象

public Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int SSN { get; set; }
}

我有一个列表:

List<Person> persons = GetPersons();

我怎样才能获得 SSN 在列表中不唯一的人员中的所有人员对象,并将它们从人员列表中删除,理想情况下将它们添加到另一个名为“List<Person> dupes”的列表中?

原始列表可能如下所示:

persons = new List<Person>();
persons.Add(new Person { Id = 1, 
                         FirstName = "Chris", 
                         LastName="Columbus", 
                         SSN=111223333 }); // Is a dupe
persons.Add(new Person { Id = 1, 
                         FirstName = "E.E.", 
                         LastName="Cummings", 
                         SSN=987654321 });
persons.Add(new Person { Id = 1, 
                         FirstName = "John", 
                         LastName="Steinbeck", 
                         SSN=111223333 }); // Is a dupe
persons.Add(new Person { Id = 1, 
                         FirstName = "Yogi", 
                         LastName="Berra", 
                         SSN=123456789 }); 

最终的结果是卡明斯和贝拉出现在最初的人员名单中,而哥伦布和斯坦贝克出现在被称为骗子的名单中。

非常感谢!

最佳答案

这会为您提供重复的 SSN:

var duplicatedSSN =
    from p in persons
    group p by p.SSN into g
    where g.Count() > 1
    select g.Key;

复制的列表是这样的:

var duplicated = persons.FindAll( p => duplicatedSSN.Contains(p.SSN) );

然后遍历重复项并删除它们。

duplicated.ForEach( dup => persons.Remove(dup) ); 

关于c# - 在对象列表中查找对象数据重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619612/

相关文章:

c# - 在运行时阻止客户端应用程序中的 WCF 消息记录

c# - Masstransit AddMediator() 方法不存在

.net - VB.NET:获取实例的类名

c# - 为什么 HttpClient BaseAddress 不起作用?

c# - IIS6 ASP.NET 2.0 应用程序缓存 - 大量数据的数据存储选项和性能

c# - SqlDependency 查询通知错误

c# - 为由多个数据库表组成的 View 创建 ViewModel (MVC 4)

.net - .NET 的 BLOB 分布式存储?

c# - 在 C# 中将注册表项导出到 .REG 文件

c# - 如何从另一个用户控件中隐藏用户控件?