SQL에서 Entity Framework 수 그룹화 기준


답변:


180

쿼리 구문

var query = from p in context.People
            group p by p.name into g
            select new
            {
              name = g.Key,
              count = g.Count()
            };

방법 구문

var query = context.People
                   .GroupBy(p => p.name)
                   .Select(g => new { name = g.Key, count = g.Count() });

22

편집 : EF Core 2.1은 마침내 GroupBy를 지원합니다.

그러나 항상 콘솔 / 로그에서 메시지를 확인하십시오. 쿼리를 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


5
최대 헤드 주셔서 감사합니다
야곱 STAMM

4
또한에는 1.1 그룹화 없습니다
Simon_Weaver

4
또는 1.2 또는 2.0. 나는 포기
Simon_Weaver에게

4
2.1에 대해 발표되었습니다
Yush0 2011

오해의 소지가있을 수 있습니다. 답변을 업데이트하고 EF 7 이전의 EF 버전이 그룹화를 지원한다고 명시 적으로 언급하는 것이 중요하다고 생각합니다. OP 질문에 대한 실제 답변보다 더 많은 의견 인이 답변은 독자적으로 읽을 때 오해의 소지가 있습니다 (그리고 그렇지 않은 OP에 대한 답변으로 해석 됨). 이것을 읽을 때 EF 7조차도 그룹화를 지원하지 않고 분명히 이전 버전은 사실이 아닌 것을 지원하지 않는 것처럼 잘못된 인상을받을 수 있습니다.
BornToCode


1

다음은 .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]

0

EF 6.2에서는 나를 위해 일했습니다.

  var query = context.People
               .GroupBy(p => new {p.name})
               .Select(g => new { name = g.Key.name, count = g.Count() });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.