LINQ – 加入多个列表

我在这里查看了101 Linq示例,但我在该列表中看不到这样的内容。 如果我在那里没有看到相关的例子,请链接到它。

如果我有这三个类:

class Student { int id; string name } class Course { int id, string name } class Enrolment { int studentId; int courseId; } 

我如何使用LINQ获取学生注册的课程列表? (假设我有一个所有三个类的IList)

怎么样:

 IEnumerable FindCoursesForStudent(Student student) { return from enrolment in Enrolments where enrolment.studentId == student.id join course in Courses on enrolment.courseId equals course.id select course; } 

不是一个明确的答案,但可能隐含有助于构建您的系统。

您是否考虑过如此丰富的域模型:

 class Student { int id; string name; IEnumerable enrolments } class Course { int id, string name; } class Enrolment { Student student; Course course; } 

然后Student类可以有一个方法GetEnroledCourses(),如下所示:

 public IEnumerable GetEnroledCourses() { return enrolements.Select(enrolement => enrolement.Course).ToList().AsReadonly(); } 

在某些情况下,仅仅是与数据库一对一映射的模型就足够了,但如果您有复杂的业务逻辑,那么“贫血域模型”可能会让您感到困惑 。

 var courses = (from course in courseList join enr in enrolmentList on enr.courseId equals course.id where enr.studentId =  select course);