我有一个班级列表,每个班级都有一个学生列表。
我需要获得完整的学生列表,但student.personid
allPeopleUnique= classes.Select(c=> c.Students.Select( persons ??)).Unique(student.PersonId)
有什么想法吗?
答案 0 :(得分:1)
如果您希望所有学生 - 在具有不同值(personid)的平面列表中:
allPeopleUnique = classes.SelectMany(c=> c.Students)
.GroupBy(p => p.personid )
.Select(g => g.First())
答案 1 :(得分:1)
您想使用SelectMany:
var allStudents = classes.SelectMany(c => c.Students).Distinct();
如果单个学生的学生对象不相同,则可以使用DistinctBy
recipe from this question。或者你为学生类型实现这样的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());