0

考虑将在 MVC 控制器中使用的这个查询:

return
    from student in Students
    where //..
    select student;

结果将转换为 JSON,如:

[
    {firstName: "John", lastName="Smith"},
    ...
]

我想要一个查询来包括这样的课程计数:

[
    {firstName: "John", lastName="Smith", courseCount: "4"},
    ...
]

第一个解决方案是使用匿名对象创建查询,如下所示:

return
    from student in Students
    join course in Customers on course.StudentId equals student.Id 
    where //..
    group by //...
    select new {student.FirstName, student.LastName, CourseCount = courseGroup.Count()};

但是这样我就失去了学生的整个对象。例如,如果我Age稍后向学生添加属性,我应该更新此查询并添加student.Age到选择部分。但在第一个解决方案中,结果会自动包含该字段。

我正在寻找一个更强大的解决方案来执行此选择,因此对Student类的所有更改都会自动传播到结果。

解决方法: 这将是一个解决方案,但它会更改 JSON 格式并且听起来有点棘手。我正在寻找更好的解决方案。(也许是动态对象!)

select new { Student = student, CourseCount = courseGroup.Count()};

编辑: 所需的解决方案是这样的:

select new Student(student){CourseCount = courseGroup.Count()}

以动态方式添加 CourseCount!

4

1 回答 1

-1

您可以对课程进行左连接,这将为您提供所需的结果。

[代码] 从学生中的学生返回 course.StudentId 等于 student.Id

从 courseGroup.DefaultIfEmpty() 中的课程进入 courseGroup

where //..
select new {student.FirstName, student.LastName, CourseCount = courseGroup.Count()};

[代码]

如果您执行 GroupBy,它将取消学生课程,然后您必须执行类似... courseGroup.StudentFirstName ... 的操作,具体取决于您的 GroupBy 的外观。

于 2013-07-08T00:25:06.513 回答