我有下一个查询:
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)
答案 0 :(得分:0)
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会再次生成一个包含少量子查询的查询。但主要问题已解决