我有以下型号:
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/