实体框架按列从连接分组
本文关键字:连接 框架 实体 | 更新日期: 2023-09-27 18:11:28
我有下一个查询:
select VisitLines.ProcedureId, COUNT(DISTINCT VisitLines.VisitId) as nt
from Visits
LEFT JOIN VisitLines ON Visits.Id = VisitLines.VisitId
WHERE Visits.VisitStatusId = 1 AND Visits.IsActive = 1 AND VisitLines.IsActive = 1
GROUP BY VisitLines.ProcedureId
主要问题:是否存在从使用linq连接到按列分组的能力?我想知道如何使用'collection'列。
是否可以强制EF生成COUNT(DISTINCT列)?IQueryable.GroupBy。Select(x => x.Select(n => n. number).Distinct().Count())生成查询的子查询数比COUNT(DISTINCT)慢得多
我发现。需要使用SelectMany
和第二个参数resultSelector
:
dbContext.Visits.Where(x => x.IsActive)
.SelectMany(x => x.VisitLines, (v, vl) => new
{
v.Id,
vl.ProcedureId
})
.GroupBy(x => x.ProcedureId)
.Select(x => new
{
Id = x.Key,
VisitCount = x.Count()
}).ToArray();
生成所需的SQL,但我需要通过访问进行不同计数。
如果我改变VisitCount = x.Distinct().Count()
,那么EF再次生成一个具有少量子查询的查询。但主要问题解决了