按LINQ中的子表分组

本文关键字:LINQ | 更新日期: 2023-09-27 18:29:16

我有学生表和科目表,我需要按科目对学生进行分组。我尝试了以下内容,但没有显示。StudentSubjects.SubjectName。如何用子表编写分组。

学生->学生ID |姓名
StudentSubjects->SubjectID|StudentID|SubjectName

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

按LINQ中的子表分组

听起来应该查询StudentSubjects而不是Student:

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(),                           
                       });

您应该能够通过StudentSubject对象本身进行分组

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

但如果你不想,可以使用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(),                           
           };