从C#中另一个List中的列表中获取单个字段LINQ
问题描述:
我有一个学校列表,其中每个列表包含一个课程列表,其中每个课程包含一个单一的教师。我想获得不同学校和不同课程的所有教师名单。从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();
我厌倦了,但它给了我一个错误(它遵循了虽然):处理服务器端结果运算符做客户端后。我们已经得到了排序错了...
答
schools.SelectMany(s => s.Courses).SelectMany(c => c.Teacher)
或者,如果你想与学校>教师>课程构建它...
schools.SelectMany(s => s.Teachers)
您还可以添加一个.Distinct()到最后,如果同一位老师可以有多个课程/学校。
+0
这工作。谢谢!我只是想知道SelectMany方法做了什么,现在我知道了。 – mute
答
你可以使用这个LINQ查询拉所有Teacher
对象:
var allTeachers = from school in schools
from course in school.Courses
select course.Teacher;
如果这是来自你应该有一个老师表的数据库,为什么这个递归关系,而不是直接从表中选择的所有项目复杂? – Gusman
你是对的,它有一张教师桌。但是我有一些标准,我正在过滤学校名单。 – mute
好的,然后颠倒逻辑,一所学校会有很多课程和一门课程很多老师,但是老师会有一门课程,而一门课程会有一所学校,所以从老师那里选择和检查会更容易教师课程和教师课程学校。 – Gusman