이 SQL
문장을 Linq-Entity
쿼리 로 번역해야 합니다 ...
SELECT name, count(name) FROM people
GROUP by name
이 SQL
문장을 Linq-Entity
쿼리 로 번역해야 합니다 ...
SELECT name, count(name) FROM people
GROUP by name
답변:
그러나 항상 콘솔 / 로그에서 메시지를 확인하십시오. 쿼리를 SQL로 변환 할 수없고 로컬에서 평가된다는 알림이 표시되면 다시 작성해야 할 수 있습니다.
Entity Framework 7 (현재 Entity Framework Core 1.0 / 2.0으로 이름이 변경됨 )은 생성 된 SQL GroupBy()
로의 변환을 아직 지원하지 않습니다 GROUP BY
(최종 1.0 릴리스에서도 지원 하지 않음). 모든 그룹화 논리는 클라이언트 측에서 실행되므로 많은 데이터가로드 될 수 있습니다.
결국 이와 같이 작성된 코드는 자동으로 GROUP BY를 사용하기 시작하지만 지금은 그룹화되지 않은 전체 데이터 세트를 메모리에로드 할 때 성능 문제가 발생하는지 매우주의해야합니다.
이것이 딜 브레이커 인 시나리오의 경우 SQL을 직접 작성하고 EF를 통해 실행해야합니다.
의심스러운 경우 Sql Profiler를 실행하고 생성 된 내용을 확인합니다. 어쨌든 수행해야 할 작업입니다.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
유용한 확장은 Dictionary
빠른 조회 (예 : 루프) 를 위해 결과를 수집하는 것입니다 .
var resultDict = _dbContext.Projects
.Where(p => p.Status == ProjectStatus.Active)
.GroupBy(f => f.Country)
.Select(g => new { country = g.Key, count = g.Count() })
.ToDictionary(k => k.country, i => i.count);
원래 위치 : http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
다음은 .net core 2.1에서 group by의 간단한 예입니다.
var query = this.DbContext.Notifications.
Where(n=> n.Sent == false).
GroupBy(n => new { n.AppUserId })
.Select(g => new { AppUserId = g.Key, Count = g.Count() });
var query2 = from n in this.DbContext.Notifications
where n.Sent == false
group n by n.AppUserId into g
select new { id = g.Key, Count = g.Count()};
다음으로 번역됩니다.
SELECT [n].[AppUserId], COUNT(*) AS [Count]
FROM [Notifications] AS [n]
WHERE [n].[Sent] = 0
GROUP BY [n].[AppUserId]