2016-05-12 107 views
0

我有一個學校列表,其中每個列表包含一個課程列表,其中每個課程包含一個單一的教師。我想獲得不同學校和不同課程的所有教師名單。從C#中另一個List中的列表中獲取單個字段LINQ

public School() 
{ 
    public List<Course> Courses; 
} 

public Course() 
{ 
    public Teacher Teacher; 
} 

var schools = new List<School>(); 

var allTeachers = schools.select(s => s.Courses.select(t => t.Teacher)).ToList(); 

我厭倦了,但它給了我一個錯誤(它遵循了雖然):處理服務器端結果運算符做客戶端後。我們已經得到了排序錯了...

+0

如果這是來自你應該有一個老師表的數據庫,爲什麼這個遞歸關係,而不是直接從表中選擇的所有項目複雜? – Gusman

+0

你是對的,它有一張教師桌。但是我有一些標準,我正在過濾學校名單。 – mute

+0

好的,然後顛倒邏輯,一所學校會有很多課程和一門課程很多老師,但是老師會有一門課程,而一門課程會有一所學校,所以從老師那裏選擇和檢查會更容易教師課程和教師課程學校。 – Gusman

回答

2
schools.SelectMany(s => s.Courses).SelectMany(c => c.Teacher) 

或者,如果你想與學校>教師>課程構建它...

schools.SelectMany(s => s.Teachers) 

您還可以添加一個.Distinct()到最後,如果同一位老師可以有多個課程/學校。

+0

這工作。謝謝!我只是想知道SelectMany方法做了什麼,現在我知道了。 – mute

1

你可以使用這個LINQ查詢拉所有Teacher對象:

 var allTeachers = from school in schools 
          from course in school.Courses 
          select course.Teacher;