2013-08-27 7 views
2

나는 학생 테이블이 있으며 과목별로 그룹화해야하는 과목 테이블이 있습니다. 나는 그다지 보이지 않는 s.StudentSubjects.SubjectName을 시도했다. 어떻게하면 하위 테이블과 함께 그룹을 작성할 수 있습니다.LINQ의 자식 테이블에 의한 그룹

학생 -> 학생 ID | 이름
StudentSubjects -> SubjectID | 학생 ID | StudentSubject 객체 자체

var list = from s in students 
      group s by s.StudentSubjects into g 
      select new StudentSubjectsCounts 
      { 
       Name = g.Key.SubjectName, 
       Count = g.Count(),       
      }; 

에 의해

 var list = from s in students 
        group s by s.StudentSubjects.? into g 
        select new StudentSubjectsCounts 
        { 
         Name = g.Key, 
         Count = g.Count(),       
        }; 

답변

2

같이 소리 Student 대신 StudentSubjects을 쿼리해야합니다.

var list = from ss in studentSubjects 
      group ss by s.SubjectName into g 
      select new StudentSubjectsCounts 
      { 
       Name = g.Key, 
       Count = g.Count(),       
      }; 
또는 학생들의 목록에서 시작 :

var list = students.SelectMany(s => s.StudentSubjects) 
        .GroupBy(ss => ss.SubjectName) 
        .Select(g => new StudentSubjectsCounts 
         { 
          Name = g.Key, 
          Count = g.Count(),       
         }); 
1

당신은 그룹에 수 있어야 한 제목을하지만, 프로젝트 이름을 사용하지 않으려면 Select

var list = from s in students 
      group s by s.StudentSubjects.Select(ss => ss.SubjectName) into g 
      select new StudentSubjectsCounts 
      { 
       Name = g.Key, 
       Count = g.Count(),       
      }; 
+0

그래 난 당신이 제안 두 번째 옵션을 사용할 필요가 몇 가지 이유가 있습니다,하지만 어떻게 "g"배치에 온다? – Multicaster

+1

그는'group' 줄 끝에'into g '를 추가하는 것을 잊었습니다. –