2012-07-19 17 views

Odpowiedz

119

składnia zapytań

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

składnia Metoda

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

Przydatnym rozszerzeniem jest zbieranie wyników w celu uzyskania szybkiego wyszukiwania (np. Dictionary). w pętli):

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

Początkowo znaleźć tutaj: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c

14

WAŻNE: Entity Framework 7 (obecnie przemianowany na Entity Framework Rdzenia 1,0/2,0) jeszcze nie obsługują GroupBy() do tłumaczenia na GROUP BY w wygenerowanym SQL (nawet w ostatecznej wersji 1.0 nie będzie). Każda logika grupowania będzie działać po stronie klienta, co może spowodować załadowanie dużej ilości danych.

Ostatecznie napisany kod automatycznie zacznie używać GROUP BY, ale na razie musisz zachować szczególną ostrożność, jeśli załadowanie całego niepodzielonego zestawu danych do pamięci spowoduje problemy z wydajnością.

W przypadku scenariuszy, w których jest to wyłącznik transakcji, należy ręcznie napisać instrukcję SQL i wykonać ją przez EF.

Jeśli masz wątpliwości, odpal Sql Profiler i zobacz, co jest generowane - co prawdopodobnie powinieneś robić.

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

+5

Dzięki za heads-up –

+4

Również bez grupowania w 1.1 lub 1.2 –

+4

lub 2,0. Poddaję się –