2015-05-31 20 views
1

我有一個類的List,每個班有學生的列表中選擇所有兒童。LINQ到所有類

我需要得到學生的完整列表,但在student.personid

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

任何想法獨特之處?

回答

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()); 
1

如果希望所有的學生 - 在不同值的簡單列表(PERSONID):

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