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!
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 [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 [2] 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] ( [3])
URL dieses Artikels:
https://www.heise.de/-4052521
Links in diesem Artikel:
[1] https://www.heise.de/developer/artikel/GroupBy-funktioniert-in-Entity-Framework-Core-2-1-Preview-1-immer-noch-nicht-so-ganz-3998438.html?wt_mc=rss.developer.blogdotnet.atom
[2] https://blogs.msdn.microsoft.com/dotnet/2018/05/07/announcing-entity-framework-core-2-1-rc-1/
[3] mailto:hs@ix.de
Copyright © 2018 Heise Medien