连接LINQ查询中的列表

时间:2011-04-20 11:22:34

标签: linq entity-framework entity-framework-4

我的数据结构是这样设置的

  • 用户需要许多模块
  • 模块包含多个课程

这是关系的样子: enter image description here

如何获取用户所需的课程列表?

我现在的查询是:

  var courses = (from ClassEnrollment enrolment in entities.ClassEnrollment
                       where enrolment.UserID == UserID
                       join Module module in entities.Module
                         on enrolment.ModuleID equals module.ID

                         select module.Course
                     ).ToList();

但是,这不会产生课程列表,而是一系列课程列表。

如何将此查询展平为不同课程列表?

4 个答案:

答案 0 :(得分:2)

根据您的数据结构屏幕截图,ClassEnrollmentModule之间存在一对多的关系,以及名为Module的导航属性。您在ModuleCourse之间也存在多对多关系,但导航属性应称为Courses。鉴于您的代码,您需要这样的东西:

var courses = entities.
              ClassEnrollment.
              Where(e => e.UserID == UserID).
              SelectMany(e => e.Module.Courses).
              ToList();

但是,您的问题提及用户:A user takes a number of modulesHow do I get a list of courses the user takes?。但是,我没有在其他任何地方看到任何用户实体,所以如果你能澄清的话会很好。您使用的是LINQ-to-SQL,btw?

答案 1 :(得分:1)

使用SelectMany

答案 2 :(得分:1)

您可以使用

courses.SelectMany(c => c);

在查询中,您不需要显式指定范围变量的类型

或者您可以加入课程

var query = from enrolment in entities.ClassEnrollment
            join module in entities.Module on enrolment.ModuleID equals module.ID
            join course in entities.Course on module.CourseID equals course.ID
            where enrolment.UserID == UserID
            select course;

var course = query.ToList();

答案 3 :(得分:1)

这样的事情:

var courses = from ClassEnrollment enrolment in entities.ClassEnrollment
              from module in entities.Module
              where enrolment.ModuleID equals module.ID && enrolment.UserID equals UserID
              select module.Course