1

この質問はstackoverflowで何度か尋ねられており、少なくとも半ダース読んだことがありますが、単純な多対多のlinq結合クエリに頭を悩ませることはできません。これは私のデータベース EDMX ですここに画像の説明を入力

私は単に、各学生の科目とともに、学生のリストを WPF データグリッドに入力しようとしています。

これで、結合を行う代わりに単にナビゲーション プロパティを使用できることがわかりましたが、正しい結果を得ることができませんでした

だから(C#/ VB.netのいずれか)クエリのように

var listOfStudents= // get a list with all students , along with each student's subjects

助けてくれてありがとう、そのような単純なクエリですが、私はちょっと立ち往生しています

4

3 に答える 3

4
var listOfStudents = db.Student.Select(x => new { Id = x.Id, Name = x.StudentName, Subjects = x.StudentsSubjects.Select(y => y.Subject) });
于 2013-07-20T20:48:44.477 に答える
1

通常の LINQ 結合でうまくいくはずです。以下は縮小されたテスト ケースです。

Public Class Student
  Public Property Id As String
  Public Property StudentName As String
  Public Property GPA As String
End Class

Public Class StudentsSubject
  Public Property SubjectId As String
  Public Property StudentId As String
  Public Property Id As String
End Class

Public Class Subject
  Public Property Id As String
  Public Property SubjectName As String
End Class

Sub Main()
  Dim students As New List(Of Student)
  students.Add(New Student With {.Id = "1", .GPA = "GPA1", .StudentName = "John"})
  students.Add(New Student With {.Id = "2", .GPA = "GPA2", .StudentName = "Peter"})

  Dim subjects As New List(Of Subject)
  subjects.Add(New Subject With {.Id = "100", .SubjectName = "Maths"})
  subjects.Add(New Subject With {.Id = "200", .SubjectName = "Physics"})

  Dim studentsSubject As New List(Of StudentsSubject)
  studentsSubject.Add(New StudentsSubject With {.Id = "10", .StudentId = "1", .SubjectId = "100"})
  studentsSubject.Add(New StudentsSubject With {.Id = "20", .StudentId = "1", .SubjectId = "200"})
  studentsSubject.Add(New StudentsSubject With {.Id = "30", .StudentId = "2", .SubjectId = "100"})

  Dim listOfStudents = From st In students
                       Join ss In studentsSubject On ss.StudentId Equals st.Id
                       Join sb In subjects On ss.SubjectId Equals sb.Id
                       Select st.StudentName, st.GPA, sb.SubjectName
End Sub
于 2013-07-20T20:25:09.233 に答える