【发布时间】:2020-02-13 21:13:15
【问题描述】:
在这个小的 ASP.Net Core 应用程序中,我试图按学生的注册日期对学生进行分组,并以逗号分隔的字符串返回学生的姓名,而不是另一种聚合。
在使用 SQL 时,我过去使用过 stuff 函数,但我无法在 LINQ 中执行作为子查询的等效操作。
Core 不允许我执行我最初尝试过的客户端 GroupBys。
不支持客户端 GroupBy。
我已尝试以下代码并收到 InvalidOperationException:
IQueryable<EnrollmentDateGroup> data =
_context.Students
.GroupBy(s => s.EnrollmentDate)
.Select(s => new EnrollmentDateGroup()
{
EnrollmentDate = s.Key,
StudentCount = s.Count(),
//BELOW IS NOT WORKING
StudentNamesCSV = string.Join(",", s.Select(x => x.FirstMidName + " " + x.LastName))
});
另一个尝试和错误消息,不再使用已经分组的数据:
SqlException:列 'Student.EnrollmentDate' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。
//ALSO NOT WORKING
...
StudentNamesCSV = string.Join(",", _context.Students
.Where(x => x.EnrollmentDate == s.Key)
.Select(x => x.FirstMidName + " " + x.LastName))
...
欢迎任何想法!谢谢。
【问题讨论】:
-
我认为您使用的是 EF Core 3.x?您可以通过明确指出您想要的方式来做客户
GroupBy:将AsEnumerable()放在GroupBy之前。由于Student.EnrollmentDate没有出现在您的第二个查询中,我不认为您的错误消息与您的查询正确匹配。
标签: entity-framework linq asp.net-core-mvc