Ich muss diese SQL
Aussage in eine Linq-Entity
Abfrage übersetzen ...
SELECT name, count(name) FROM people
GROUP by name
quelle
Ich muss diese SQL
Aussage in eine Linq-Entity
Abfrage übersetzen ...
SELECT name, count(name) FROM people
GROUP by name
Abfragesyntax
var query = from p in context.People
group p by p.name into g
select new
{
name = g.Key,
count = g.Count()
};
Methodensyntax
var query = context.People
.GroupBy(p => p.name)
.Select(g => new { name = g.Key, count = g.Count() });
Achten Sie jedoch immer in der Konsole / im Protokoll auf Nachrichten. Wenn Sie eine Benachrichtigung erhalten, dass Ihre Abfrage nicht in SQL konvertiert werden konnte und lokal ausgewertet wird, müssen Sie sie möglicherweise neu schreiben.
Entity Framework 7 (jetzt in Entity Framework Core 1.0 / 2.0 umbenannt ) unterstützt die GroupBy()
Übersetzung GROUP BY
in generiertes SQL noch nicht (selbst in der endgültigen Version 1.0 wird dies nicht der Fall sein ). Jede Gruppierungslogik wird auf der Clientseite ausgeführt, wodurch möglicherweise viele Daten geladen werden.
Irgendwann wird Code, der so geschrieben wurde, automatisch mit GROUP BY verwendet. Im Moment müssen Sie jedoch sehr vorsichtig sein, wenn das Laden Ihres gesamten nicht gruppierten Datasets in den Speicher zu Leistungsproblemen führt.
In Szenarien, in denen dies ein Deal-Breaker ist, müssen Sie die SQL von Hand schreiben und über EF ausführen.
Starten Sie im Zweifelsfall den SQL Profiler und sehen Sie, was generiert wird - was Sie wahrscheinlich sowieso tun sollten.
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
Eine nützliche Erweiterung besteht darin, die Ergebnisse in a
Dictionary
für eine schnelle Suche (z. B. in einer Schleife) zu sammeln :Ursprünglich hier gefunden: http://www.snippetsource.net/Snippet/140/groupby-and-count-with-ef-in-c
quelle
Hier ist ein einfaches Beispiel für die Gruppierung nach in .net Core 2.1
Was bedeutet:
quelle
mit EF 6.2 hat es bei mir funktioniert
quelle