如何从Person对象列表中提取每个TeamNumber对应的首个成员
提取每个团队首个成员的实现方法
需求很明确:从给定的Person对象列表中,按TeamNumber分组后提取每组的第一个元素,生成仅包含各团队首个成员的精简列表。
先确认Person类定义
public class Person { public int TeamNumber { get; set; } public string Name { get; set; } }
原始完整列表示例
List<Person> list = new List<Person>() { new Person(){TeamNumber = 1, Name = "Peter"}, new Person(){TeamNumber = 1, Name = "Klaus"}, new Person(){TeamNumber = 1, Name = "Maria"}, new Person(){TeamNumber = 1, Name = "Gerda"}, new Person(){TeamNumber = 2, Name = "Ralf"}, new Person(){TeamNumber = 2, Name = "Oskar"}, new Person(){TeamNumber = 2, Name = "Anna"}, new Person(){TeamNumber = 3, Name = "Hannah"}, new Person(){TeamNumber = 3, Name = "Susi"}, new Person(){TeamNumber = 4, Name = "Ida"} };
实现方法
方法一:使用GroupBy + First(兼容所有.NET版本)
通过GroupBy按TeamNumber分组,再对每个分组取第一个元素:
var firstMembersByTeam = list .GroupBy(person => person.TeamNumber) .Select(group => group.First()) .ToList();
方法二:使用DistinctBy(.NET 6及以上版本可用)
.NET 6新增的DistinctBy方法可以直接按指定键去重,保留首次出现的元素,代码更简洁:
var firstMembersByTeam = list.DistinctBy(person => person.TeamNumber).ToList();
验证结果
遍历输出结果,会得到你期望的精简列表:
- TeamNumber = 1, Name = "Peter"
- TeamNumber = 2, Name = "Ralf"
- TeamNumber = 3, Name = "Hannah"
- TeamNumber = 4, Name = "Ida"
内容的提问来源于stack exchange,提问作者Frank Mehlhop
相关产品推荐
相关产品推荐

