在LINQ查询中应用group by,进一步加入所需的信息将丢失

时间:2016-12-31 11:03:12

标签: c# mysql linq

我有以下型号:

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; }
}

每门课程都在很多Course_TutionCenter中讲授,每门课程都有很多CourseStudent,分布在几个Course_TutionCenter上。

我在单个LINQ查询中需要以下数据:

CourseId,课程名称,提供此课程的Tution中心数量,在所有Tution中心学习此课程的学生人数

我无法使用单个LINQ查询获取此数据,因为在(课程和Course_TutionCenter)的联接中通过课程应用组时,获取所有Tution中心的学生总数的信息将丢失,因为我们在通过课程申请分组后没有多个Tution中心的ID。在课程和Course_TutionCenter的加入中

可以使用单个LINQ查询来完成吗?

2 个答案:

答案 0 :(得分:2)

我认为以下内容可以满足您的需求:

$(document).ready(function() {
  $('.valueInput').each(function() {
    $(this).text('hi!');
  });
});

答案 1 :(得分:2)

我会以最自然的方式编写LINQ查询来描述预期结果,并让ORM为我处理SQL生成(使用连接或任何需要的连接)。

在您的情况下,IMO不需要GroupBy,从Course表开始(已包含分组信息),只需使用导航属性从其他表中获取所需的聚合进行过滤:

var query = db.Course.Select(c => new
{
    CourseId = c.Id,
    CourseName = c.Name,
    NumberOfTutionCenters = db.Course_TutionCenter
        .Count(tc => tc.CourseId == c.Id),
    NumberOfStudents = db.CourseStudent
        .Count(s => s.Course_TutionCenter.CourseId == c.Id),
});