2016-05-12 109 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;