.net 如何从对象列表中只获取一个对象值

r3i60tvu  于 2023-01-03  发布在  .NET
关注(0)|答案(2)|浏览(227)

我有一个完整的对象列表“人”。
我需要一个简短的名单,其中只包括每个团队的第一个人,所以某种形式的分组和每种情况下的第一项

如何将完整列表转换为短列表(每组第一个项目和teamNumber)?

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"}
};

我喜欢得到一个简短的列表,如:(始终为每个团队编号的第一个人)

  • 团队编号= 1,姓名=“Peter”
  • 团队编号= 2,姓名=“Ralf”
  • 团队编号= 3,姓名=“Hannah”
  • 团队编号= 4,姓名=“Ida”

班级成员:

public class Person
{
    public int TeamNumber { get; set; }
    public string Name { get; set; }
}
icomxhvb

icomxhvb1#

var result= list.GroupBy(t => t.TeamNumber).Select(p => p.First()).ToList();
yzxexxkh

yzxexxkh2#

我会这么说:
首先,您需要GroupBy TeamNumber,以便(将它们分组,这样您只得到一个记录。然后,您获取第一条记录(Person),并为该TeamNumber选择该记录。然后,您对整个列表执行此操作,并将其作为一个新的List返回。

var shortList =  list.GroupBy(t => t.TeamNumber).Select(e => e.FirstOrDefault()).ToList();

然后,我建议您仔细阅读linq

相关问题