LINQ - 加入多个列表

时间:2009-04-15 14:47:02

标签: c# linq

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

如果我有这3个班级:

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

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

3 个答案:

答案 0 :(得分:10)

怎么样:

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;
}

答案 1 :(得分:1)

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

您是否考虑过更为丰富的域名模型:

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

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

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

在某些情况下,只是一对一映射到数据库的模型就足够了,但如果你有复杂的业务逻辑,那么«anemic domain model»可能会咬你。

答案 2 :(得分:0)

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