在LINQ查询中串联列表
我的数据结构是这样设置的在LINQ查询中串联列表,linq,entity-framework,entity-framework-4,Linq,Entity Framework,Entity Framework 4,我的数据结构是这样设置的 用户接受多个模块 一个模块包含许多课程 以下是这种关系的样子: 如何获取用户所修课程的列表 我现在的问题是: var courses = (from ClassEnrollment enrolment in entities.ClassEnrollment where enrolment.UserID == UserID join Module module in en
- 用户接受多个模块
- 一个模块包含许多课程
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();
然而,这并不会产生一个课程列表,而是一个课程列表
如何将此查询展平为不同课程的列表?使用。使用。您可以使用
课程。选择多个(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();
你可以用
课程。选择多个(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();
大概是这样的:
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
var courses = entities.
ClassEnrollment.
Where(e => e.UserID == UserID).
SelectMany(e => e.Module.Courses).
ToList();
大概是这样的:
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
var courses = entities.
ClassEnrollment.
Where(e => e.UserID == UserID).
SelectMany(e => e.Module.Courses).
ToList();
根据您的数据结构屏幕截图,在
类注册
和模块
之间存在一对多关系,以及名为模块
的导航属性。在模块
和课程
之间也有多对多关系,但导航属性应称为课程
。根据您的代码,您需要以下内容:
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
var courses = entities.
ClassEnrollment.
Where(e => e.UserID == UserID).
SelectMany(e => e.Module.Courses).
ToList();
但是,您的问题提到了一个用户:
一个用户学习了许多模块
,如何获取用户所学课程的列表?
。不过,我在其他地方看不到任何用户实体,所以如果您能澄清一下,那就太好了。顺便说一句,您正在使用LINQ to SQL吗?根据您的数据结构屏幕截图,您在类注册
和模块
之间有一对多的关系,以及名为模块
的导航属性。在模块
和课程
之间也有多对多关系,但导航属性应称为课程
。根据您的代码,您需要以下内容:
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
var courses = entities.
ClassEnrollment.
Where(e => e.UserID == UserID).
SelectMany(e => e.Module.Courses).
ToList();
但是,您的问题提到了一个用户:
一个用户学习了许多模块
,如何获取用户所学课程的列表?
。不过,我在其他地方看不到任何用户实体,所以如果您能澄清一下,那就太好了。顺便说一句,您使用的是LINQ到SQL吗?我使用的是实体框架。首先,我没有在类注册和用户之间添加关联,所以我的屏幕截图中没有包含这一点。现在考虑一下,我想我应该加入关联。我使用的是实体框架。首先,我没有在类注册和用户之间添加关联,所以我的屏幕截图中没有包含这一点。现在想起来,,我想我应该加入关联。它与我原来的查询有什么不同?@Extrakun:它应该将结果展平,因为它在引擎盖下使用了SelectMany
。它与我原来的查询有什么不同?@Extrakun:它应该将结果展平,因为它在引擎盖下使用了SelectMany
。模块没有courseID,它具有导航属性课程,EF内是模块关联的课程列表。模块没有courseID,它具有导航属性课程,EF内是模块关联的课程列表。