LINQ - 嵌套GroupJoin

时间:2018-02-25 01:45:06

标签: c# linq

我已经看了很多关于如何进行GroupJoin的LINQ示例。但我不知道如何执行嵌套的GroupJoin。有人有什么想法吗?

我有以下简单的课程:

public class Subject
{
    public int SubjectID { get; set;}
    public string Name { get; set; }
}

public class SubjectStudent
{
    public int SubjectStudentID { get; set; }
    public int SubjectID { get; set; }
    public int StudentID { get; set; }
}

public class StudentGrade 
{
    public int StudentGradeID { get; set;}
    public int StudentID { get; set; }
    public int GradeID { get; set; }
}

var subjects = (from s in Subject
                join ss in SubjectStudent on s.SubjectID equals ss.SubjectID into SubjectStudents
                select new 
                {
                    SubjectID = s.SubjectID,
                    Students = SubjectStudents
                })
                .ToList();

foreach (var subject in subjects)
{
    foreach(var student in subject.Students)
    {
        //foreach(var grade in student.Grades)
        //{
        //      I want to get grades for each subject.Students
        //}
    }
}

我可以在SubjectStudents之后拥有另一个GroupJoin,即StudentGrades吗?我希望能够在每个科目中迭代StudentGrades。学生。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的数据结构对我来说有点混乱。此外,如果这是您所期望的,请不要起诉: -

var result = (from s in subjects
         join ss in subjectStudents on s.SubjectID equals ss.SubjectID into SubjectStudents
              select new
                        {
                           SubjectID = s.SubjectID,
                           Students = from ss in SubjectStudents
                               join g in studentsGrade on ss.StudentID equals g.StudentID 
                               select new 
                                      { 
                                           StudentId = ss.StudentID, 
                                           GradeId = g.GradeID 
                                      }
                           })
                .ToList();

Sample Fiddle