2012-07-19 16 views

Antwort

119

Abfragesyntax

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

Methode Syntax

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

Eine nützliche Erweiterung besteht darin, die Ergebnisse in einer Dictionary für eine schnelle Suche (z.B. in einer Schleife):

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); 

Ursprünglich hier: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c

14

WICHTIG: Entity Framework 7 (jetzt umbenannt in Entity Framework Core-1.0/2.0) noch GroupBy() nicht unterstützt für Übersetzung GROUP BY in generiertem SQL (selbst in der endgültigen Version 1.0 wird es nicht). Jede Gruppierungslogik wird auf der Clientseite ausgeführt, was dazu führen kann, dass viele Daten geladen werden.

Irgendwann wird so geschriebener Code AUTOMATISCH mit GROUP BY beginnen, aber jetzt müssen Sie sehr vorsichtig sein, wenn das Laden Ihres gesamten nicht gruppierten Datensatzes in den Speicher Leistungsprobleme verursacht.

Für Szenarien, in denen dies ein Deal-Breaker ist, müssen Sie das SQL manuell schreiben und es über EF ausführen.

Im Zweifelsfall Sql Profiler hochfeuern und sehen, was generiert wird - was Sie wahrscheinlich sowieso tun sollten.

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

+5

Danke für die oben –

+4

auch keine Gruppierung in 1.1 –

+4

oder 1.2 oder 2.0 Köpfe. Ich gebe –

Verwandte Themen