Linq选择所有类中的所有孩子

本文关键字:孩子 Linq 选择 | 更新日期: 2023-09-27 17:51:15

我有一个班级列表,每个班级都有一个学生列表。

我需要一个完整的学生名单,但在student.personid上是唯一的

allPeopleUnique=   classes.Select(c=> c.Students.Select( persons ??)).Unique(student.PersonId)

任何想法?

Linq选择所有类中的所有孩子

你想使用SelectMany:

var allStudents = classes.SelectMany(c => c.Students).Distinct();

如果单个唯一学生的学生对象不相同,则可以使用本题中的DistinctBy配方。或者像这样为学生类型实现IEqualityComparer:

public class StudentEqualityComparer : IEqualityComparer<Student>
{
    public bool Equals(Student a, Student b)
    {
        return a.PersonId == b.PersonId;
    }
    public int GetHashCode(Student s)
    {
        return s.PersonId.GetHashCode(); // or just `return s.PersonId`
    }
}
var allStudents = classes.SelectMany(c => c.Students)
                         .Distinct(new StudentEqualityComparer());

如果您希望所有的学生-在一个具有不同值(personid)的平面列表中:

allPeopleUnique =  classes.SelectMany(c=> c.Students)
                          .GroupBy(p => p.personid )
                          .Select(g => g.First())