C# LINQ-连接多个列表

C# LINQ-连接多个列表,c#,linq,C#,Linq,我查看了101个Linq样本,但在该列表中看不到类似的内容。如果我只是没有看到一个相关的例子,请链接到它 如果我有这3门课: class Student { int id; string name } class Course { int id, string name } class Enrolment { int studentId; int courseId; } 如何使用LINQ获取学生注册的课程列表?(假设我有三个类的IList)怎么样: IEnumerable<Course&

我查看了101个Linq样本,但在该列表中看不到类似的内容。如果我只是没有看到一个相关的例子,请链接到它

如果我有这3门课:

class Student { int id; string name }
class Course { int id, string name }
class Enrolment { int studentId; int courseId; }
如何使用LINQ获取学生注册的课程列表?(假设我有三个类的IList)

怎么样:

IEnumerable<Course> 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;
}
IEnumerable FindCoursesForStudent(学生)
{
从入学返回
其中registration.studentId==student.id
参加课程
注册时.courseId等于course.id
选课;
}
var课程=(来自课程列表中的课程
将enr加入enr.courseId等于course.id上的enrolmentList
其中enr.studentId=
选择课程);

这不是一个明确的答案,但可能对构建您的系统有潜在的帮助

您是否考虑过这样一种更丰富的领域模型:

class Student { int id; string name; IEnumerable<Enrolment> enrolments }
class Course { int id, string name; }
class Enrolment { Student student; Course course; }
班级学生{int id;字符串名称;IEnumerable注册人数}
类课程{int id,字符串名称;}
班级注册{学生;课程;}
?

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

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

在某些情况下,只需一对一地映射到数据库的模型就足够了,但如果您有复杂的业务逻辑,这样的模型可能会对您不利。

在加入之前在何处进行操作更有效-将大量注册与加入中的课程相匹配没有任何意义,只是马上又扔掉了。听起来LINQ需要一个更好的优化器;)
class Student { int id; string name; IEnumerable<Enrolment> enrolments }
class Course { int id, string name; }
class Enrolment { Student student; Course course; }
public IEnumerable<Course> GetEnroledCourses()
{
   return enrolements.Select(enrolement => enrolement.Course).ToList().AsReadonly();
}