복붙노트

[SQL] 엔티티 프레임 워크에 대한 SQL 그룹-으로 카운트

SQL

엔티티 프레임 워크에 대한 SQL 그룹-으로 카운트

나는 Linq에 엔티티 쿼리에이 SQL 문을 변환 할 필요가 ...

SELECT name, count(name) FROM people
GROUP by name

해결법

  1. ==============================

    1.쿼리 구문

    쿼리 구문

    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() });
    
  2. ==============================

    2.그러나 항상 메시지 로그 / 콘솔에서 밖을 봐. 당신이 당신의 쿼리가 SQL로 변환 할 수 없습니다 및 C로 평가 될 것이라는 통지를 볼 경우, 당신은 그것을 다시 작성해야 할 수도 있습니다.

    그러나 항상 메시지 로그 / 콘솔에서 밖을 봐. 당신이 당신의 쿼리가 SQL로 변환 할 수 없습니다 및 C로 평가 될 것이라는 통지를 볼 경우, 당신은 그것을 다시 작성해야 할 수도 있습니다.

    (현재 엔티티 프레임 워크 코어 1.0 / 2.0로 변경) 엔티티 프레임 워크 (7)는 아직 (이되지 않더라도 최종 1.0 릴리스에서) 생성 된 SQL에서 GROUP BY로 번역 GROUPBY ()를 지원하지 않습니다. 모든 그룹화 논리는 많은 양의 데이터를로드 할 원인이 될 수있는 클라이언트 측에서 실행됩니다.

    결국 이런 식으로 작성된 코드는 자동적으로 GROUP BY를 사용하여 시작되지만 메모리에 전체 해제 그룹화 된 데이터 집합을로드하면 성능 문제가 발생할 경우 지금 당신은 매우 신중해야합니다.

    시나리오 이것은 당신이 손으로 SQL을 작성하고 EF를 통해 실행해야합니다 거래 - 차단기입니다.

    당신은 아마 어쨌든 일을해야하는 - 그리고 SQL 프로파일 러까지 의심 화재의 경우 생성되는 것을 참조하십시오.

    https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2

  3. ==============================

    3.편리한 확장 (예를 들어 루프에서) 신속한 검색을 위해 사전에 결과를 수집 할 수있다 :

    편리한 확장 (예를 들어 루프에서) 신속한 검색을 위해 사전에 결과를 수집 할 수있다 :

    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

  4. ==============================

    4.여기서 코어 .NET 2.1 그룹화의 간단한 예는

    여기서 코어 .NET 2.1 그룹화의 간단한 예는

    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]
    
  5. ==============================

    5.EF 6.2 그것은 나를 위해 일한

    EF 6.2 그것은 나를 위해 일한

      var query = context.People
                   .GroupBy(p => new {p.name})
                   .Select(g => new { name = g.Key.name, count = g.Count() });
    
  6. from https://stackoverflow.com/questions/11564311/sql-to-entity-framework-count-group-by by cc-by-sa and MIT license