C# 如何从列表中删除重复用户但合并其角色

C# 如何从列表中删除重复用户但合并其角色,c#,linq,C#,Linq,假设我有一个姓名和角色列表: 列表中的每个项目都属于PersonDetails类型: public class PersonDetails { public int Id { get; set; } public string Name { get; set; } public List<Role> Roles { get; set; } } public class Role { public string Name { get; set; } } 公共类个人信息 {

假设我有一个姓名和角色列表:

列表中的每个项目都属于PersonDetails类型:

public class PersonDetails
{
 public int Id { get; set; }
 public string Name { get; set; }
 public List<Role> Roles { get; set; }
}

public class Role
{
 public string Name { get; set; }
}
公共类个人信息
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表角色{get;set;}
}
公共阶级角色
{
公共字符串名称{get;set;}
}
因此,在我列出的这些项目中,我可能有以下内容:

  • Id 23,其角色包含具有role.Name=“Manager”的角色
  • Id 23 Eric,其角色包含具有role.Name=“CEO”的角色
  • Id 23 Eric,其角色包含具有role.Name=“CIO”的角色
  • 这就是目前的情况,但因为我希望我的名单是同一个人:

  • Id 23 Eric,其角色包括“经理”、“首席执行官”、“首席信息官”
  • 有人能告诉我如何将我的项目列表更改为这样吗?

    试试这个:

    from details in detailsList
    group details by new {Id = details.Id, Name = details.Name} into groupedDetails
    select new PersonDetails()
    {
        Id = groupedDetails.Key.Id,
        Name = groupingDetails.Key.Name,
        Roles = groupingDetails.SelectMany(member => member.Roles).ToList()
    }
    
    我还没有测试过这个,但我认为它会起作用