【问题标题】:Group by child table in LINQ在 LINQ 中按子表分组
【发布时间】:2013-08-27 10:24:22
【问题描述】:

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

学生 -> 学生 ID |名称
StudentSubjects -> SubjectID |学生证 |主题名称

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

【问题讨论】:

    标签: c# .net linq entity-framework


    【解决方案1】:

    听起来你应该查询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(),                           
                           });
    

    【讨论】:

      【解决方案2】:

      您应该能够按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(),                           
                 };
      

      【讨论】:

      • 是的,有一些原因我需要使用您建议的第二个选项,但是“g”是如何出现的?
      • 他忘记在group 行的末尾添加into g
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      相关资源
      最近更新 更多