C# 使用实体框架从关联中获取ID

C# 使用实体框架从关联中获取ID,c#,linq,entity-framework,associations,C#,Linq,Entity Framework,Associations,我正在构建这个小应用程序,作为学习实体框架基础知识的练习。它使用一个MySQL数据库,包含3个表:课程、学生和学生课程: 我使用此数据库在Visual Studio中创建了一个实体模型: 很好用。我可以用datagridview绑定一个表,修改数据并按下按钮保存更改。但正如你所看到的,学生们的课程是一种联系(这对我来说是相当新鲜的)。现在我的问题是:我需要每个课程ID来指定一个学生ID(以了解学生正在学习哪些课程)。我认为这个LINQ查询很好: var query = from s in s

我正在构建这个小应用程序,作为学习实体框架基础知识的练习。它使用一个MySQL数据库,包含3个表:课程、学生和学生课程:

我使用此数据库在Visual Studio中创建了一个实体模型:

很好用。我可以用datagridview绑定一个表,修改数据并按下按钮保存更改。但正如你所看到的,学生们的课程是一种联系(这对我来说是相当新鲜的)。现在我的问题是:我需要每个课程ID来指定一个学生ID(以了解学生正在学习哪些课程)。我认为这个LINQ查询很好:

var query = from s in school.Students.AsEnumerable()
            where s.ID == selectedStudentId
            select s.Courses;

但我似乎真的无法从这个实体集合中提取课程ID?我使用了一个
foreach(查询中的var课程)
,但我真的被困在这里了

您应该能够通过以下方式获取课程ID:

var studentsCourseIDs = (from s in school.Students
                         where s.ID == selectedStudentId
                         select s.Courses.Select(c => c.ID))
                        .Single();
或者,您可以从
课程集开始:

var studentsCourseIDs = (from c in school.Courses
                         where c.Students.Any(s => s.ID == selectedStudentId)
                         select c.ID)
                        .ToList();
不要在示例中使用
AsEnumerable()
,因为它会在
where
子句和应用选择之前将整个students表加载到内存中