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!
- 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] ()