2012-05-28 41 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