我的数据结构是这样设置的
这是关系的样子:
如何获取用户所需的课程列表?
我现在的查询是:
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();
但是,这不会产生课程列表,而是一系列课程列表。
如何将此查询展平为不同课程列表?
答案 0 :(得分:2)
根据您的数据结构屏幕截图,ClassEnrollment
和Module
之间存在一对多的关系,以及名为Module
的导航属性。您在Module
和Course
之间也存在多对多关系,但导航属性应称为Courses
。鉴于您的代码,您需要这样的东西:
var courses = entities.
ClassEnrollment.
Where(e => e.UserID == UserID).
SelectMany(e => e.Module.Courses).
ToList();
但是,您的问题提及用户:A user takes a number of modules
,How 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