2013-01-04 73 views
2

表1:學生如何查詢基於鏈接表中的數據在LINQ

StudentID, StudentName

表2:課程

CourseID, CourseName

表3:集團

GroupID, GroupName

表4:StudentCourseGroup

StudentID, CourseID, GroupID

我希望所有的學生誰屬於 'XYZ' 當然,在下面的格式

Class MyStudent 

    string StudentName 
    String [] Groups 

每個學生都可以成爲會員一個或多個組,我需要在我的LINQ查詢中填充「Class MyClass」,以便它擁有StudentName和List of Group s在每個對象中。

您可以請建議一個可以這樣做的LINQ查詢。

+0

,你能否告訴我們,[你嘗試過什麼?](http://whathaveyoutried.com) – Blachshma

+0

VAR的查詢=從S IN db.Students 在db.StudentCourseGroup加入SCG上S.StudentID等於SCG。 StudentId 在SCG.CourseId等於C.CourseId db.Courses將C加入的G上SCG.GROUPID db.Groups等於G.GROUPID 選擇新的UserDetails() { 姓= u.FirstName, 組= {這裏需要列出組}} }; – InTheWorldOfCodingApplications

+0

這個查詢的問題是它返回兩個單獨的行,以防學生是兩個組的成員。我想要的是一個帶有嵌套字符串[]對象的學生對象,用於每個學生對象中的組 – InTheWorldOfCodingApplications

回答

1
var query = from s in db.Student 
      join scg in db.StudentCourseGroup on s.StudentID equals scg.StudentID 
      join c in db.Course on scg.CourseID equals c.CourseID 
      join g in db.Group on scg.GroupID equals g.GroupID 
      where c.CourseName == "xyz" 
      select new { s, g } into x 
      group x by x.s into studentGroups 
      select new MyStudent { 
       StudentName = studentGroups.Key.StudentName, 
       Groups = studentGroups.Select(sg => sg.g.GroupName) 
      }; 
+0

謝謝,這看起來不錯,但它會拋出Groups = studentGroups.Select(sg => sg.g.GroupName).ToArray()異常,它說LINQ不能識別LINQ to Entities不能識別方法'System.String [ ] ToArray [String](System.Collections.Generic.IEnumerable'1 [System.String])'方法 – InTheWorldOfCodingApplications

+0

@ user1711287好吧,您可以將MyStudent組屬性類型更改爲IEnumerable Groups,然後直接移除ToArray()。或者你應該把MyStudent對象創建移動到內存中。 –

+1

它的工作,非常感謝 – InTheWorldOfCodingApplications