2012-05-28 163 views
3

我有一个小型应用程序,作为练习来学习实体框架的基础知识。它采用了MySQL数据库与3个表:课程,学生和Students_has_Courses: DB Schema使用实体框架从关联中获取ID

我用这个数据库建立在Visual Studio中的实体模型: VS Schema

它的正常工作。我可以使用datagridview绑定表格,修改数据并按下按钮以保存更改。但正如你所看到的,Students_has_Courses是一个协会(这对我来说很新颖)。现在我的问题是:我需要每个课程ID来指定一个学生ID(以了解学生正在参加哪些课程)。我认为这个LINQ查询会很好:

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

但我真的好像不能从这个EntityCollection中提取课程ID?我用了foreach(var course in query)但我真的被卡在这里。

回答

5

您应该能够通过使用获得的过程中标识:

var studentsCourseIDs = (from s in school.Students 
         where s.ID == selectedStudentId 
         select s.Courses.Select(c => c.ID)) 
         .Single(); 

或者您从Courses集开始:

var studentsCourseIDs = (from c in school.Courses 
         where c.Students.Any(s => s.ID == selectedStudentId) 
         select c.ID) 
         .ToList(); 

不要在您的示例使用AsEnumerable(),因为它会在应用where子句和选择之前,将整个学生表加载到内存中。

+0

非常好,这似乎是工作!谢谢 – JSS