实体框架按列从连接分组

本文关键字:连接 框架 实体 | 更新日期: 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
  1. 主要问题:是否存在从使用linq连接到按列分组的能力?我想知道如何使用'collection'列。

  2. 是否可以强制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再次生成一个具有少量子查询的查询。但主要问题解决了