GroupBy funktioniert in Entity Framework Core 2.1 Release Candidate 1 endlich

Tests in Entity Framework Core 2.1 Release Candidate 1 zeigen, dass nun tatsächlich die Übersetzung des LINQ-GroupBy-Operators in SQL funktioniert. Endlich!

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Tests in Entity Framework Core 2.1 Release Candidate 1 zeigen, dass nun tatsächlich die Übersetzung des LINQ-GroupBy-Operators in SQL funktioniert. Endlich!

Ich hatte wiederholt berichtet, dass Microsofts neuer OR-Mapper Entity Framework Core die bedeutende Schwäche besitzt, den LINQ-Operator GroupBy() nicht in entsprechendes GROUP BY in SQL umzusetzen, sondern alle Datensätze ins RAM zu laden und dort zu gruppieren, was eine Performance-Katastrophe bei vielen Datensätzen ist. Zuletzt berichtete ich, dass es in Entity Framework 2.1 Preview 1 zwar funktionieren sollte, es tatsächlich aber nur in bestimmten Fälle klappte.

Heute kann ich berichten: Meine Tests in Entity Framework Core 2.1 Release Candidate 1 zeigen, dass nun tatsächlich die Übersetzung des LINQ-GroupBy-Operators in SQL funktioniert. Endlich!

Aus diesem LINQ-Befehl:

   // Ermittele die Anzahl der Flüge pro Abflugort
using (var ctx = new WWWingsContext())
{
var gruppen = from p in ctx.FlugSet
orderby p.FreiePlaetze
group p by p.Abflugort into g
select new { Ort = g.Key, Anzahl = g.Count() };
Console.WriteLine("Anzahl: " + gruppen.Count());
// Ausgabe
foreach (var g in gruppen.ToList())
{
Console.WriteLine(g.Ort + ": " + g.Anzahl);
}
}

ensteht nun dieses SQL in Version 2.1 Release Candidate 1 von Entity Framework Core:

SELECT [p].[Departure] AS [City], COUNT(*) AS [Count]
FROM [Flight] AS [p]
GROUP BY [p].[Departure]
HAVING COUNT(*) > 5
ORDER BY [Count] ()