我有以下型号:

public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Course_TutionCenter
{
    public int Id { get; set; }
    public int CourseId { get; set; }
    public int TutionCenterId { get; set; }

    [ForeignKey("CourseId")]
    public virtual Course Course { get; set; }

    [ForeignKey("TutionCenterId")]
    public virtual TutionCenter TutionCenter { get; set; }
}

public class CourseStudent
{
    public int Id { get; set; }
    public int Course_TutionCenter_Id { get; set; }

    [ForeignKey("Course_TutionCenter_Id")]
    public virtual Course_TutionCenter Course_TutionCenter { get; set; }
}

每门课程在多个课程辅导中心授课,每门课程可以有多个课程学员,这些学员分布在多个课程辅导中心。
在单个linq查询中需要以下数据:
课程ID、课程名称、提供本课程的辅导中心数量、在所有辅导中心学习本课程的学生数量
我无法使用一个LINQ查询获取此数据,因为在(课程和课程辅导中心)的连接中应用按课程分组时,获取所有辅导中心总学生数的信息将丢失,因为之后我们没有多个辅导中心的ID按课程分组申请。ID加入课程和课程辅导中心
这可以使用单个linq查询完成吗?

最佳答案

我认为下面的东西符合你的要求:

var result = from course in DbCourses
             left join courseTutionCenter in DbCourseTutionCenter
             on course.Id equals courseTutionCenter.CourseId
             left join courseStudent in DbCourseStudent
             on courseStudent.Course_TutionCenter_Id equals courseTutionCenter.TutionCenterId
             group by new { course.Id, course.Name } into gr
             select new
             {
                 CourseId = gr.Key.Id,
                 CourseName = gr.Key.Name,
                 TutionCenters = gr.GroupBy(x=>x.courseStudent.Course_TutionCenter_Id).Count(),
                 Students = gr.GroupBy(x=>x.courseStudent.Id).Count()
             };

关于c# - 在LINQ查询中应用group by,进一步加入所需的信息将丢失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41407726/

10-09 08:01