Entity Framework Core Grundkurs

Daten gruppieren und zählen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Daten können in einer SQL-Select-Anweisung über das Schlüsselwort GroupBy gruppiert werden. Das Entity Framework Core bietet auch die Methode GroupBy(). Diese gruppiert im Hauptspeicher des Client-PCs, und nicht in der Datenbank.
05:02

Transkript

Wenn wir die Anzahl der Datensätze, die zu einer bestimmten Gruppe gehören, zählen möchten, dann können wir dazu eine Kombination von GroupBy und der Aggregat-Funktion "Count" nutzen. Im Fall des Entity Frameworks wird dies durch die GroupBy-Funktion umgesetzt, die ich Ihnen hier in diesem Video zeigen möchte. Dazu gehe ich zunächst hin und deklariere mir eine Variable. Ich nenne sie "Groupings". Und dieser weise ich zu meine Fahrten. Und die möchte ich nun anhand des Fahrttyps gruppieren. Ich übergebe also in dem Lambda-Ausdruck, den ich an GroupBy übergeben muss, dass ich das Feld "Fahrttyp" nutzen möchte. Wenn ich jetzt gruppiert habe, muss ich als nächstes über die Methode "Select" angeben was ich nun selektieren möchte. Und hier übergebe ich auch wieder einen Lambda-Ausdruck, und zwar selektiere ich ein neues anonymes Objekt. Und zunächst gruppiere ich den Schlüssel. Im Feld "Key", was hier an den Lambda-Ausdruck übergeben wird, steht immer der Schlüssel, nach dem gruppiert worden ist, drin, beziehungsweise der Schlüsselwert. Also, privat oder geschäftlich im Fall des Fahrttypens. Danach kann ich angeben, was ich jetzt tatsächlich ausgeben möchte, und zwar möchte ich ganz gerne die Anzahl ausgeben, also "Count". Da "Count" eine Methode ist, muss ich zunächst eine Variable definieren, also einen Feldnamen. Und diesem Feldnamen kann ich dann das Ergebnis des Methoden-Aufrufes zuweisen. Wenn ich nun das Ganze über eine foreach-Schleife auf der Konsole ausgebe, indem ich sage: für jede Gruppe in "Groupings", dann werden wir gleich in der Ausgabe etwas Unerwartetes sehen. Aber das sehen Sie, sobald ich meine Anwendung gestartet habe. Zunächst schreibe ich erstmal meine Ausgabe: ich möchte also zuerst den Schlüssel ausgeben. Das ist group.Key Und als nächstes nehmen wir die Anzahl und das ist dann group.Count Wenn ich das Ganze jetzt starte, dann sehen wir unten, dass 67 geschäftliche Fahrten gefunden worden sind und 33 private. Und das passt auch soweit. Wir sehen allerdings auch einige Warnungen. Und zwar steht hier oben als erste Warnung, dass der LINQ Ausdruck GroupBy([x].Fahrttyp, [x]) nicht übersetzt werden konnte, und deswegen lokal ausgewertet wird. Was bedeutet das? Ein Blick auf das SQL Statement hier zeigt, dass innerhalb des SQL Statements kein GroupBy zu finden ist. Heißt also, die Gruppierung wurde komplett im Hauptspeicher durchgeführt. Bedeutet, es wurden alle Datensätze in einer Liste abgerufen, vom Server zum Client übertragen und im Hauptspeicher wurde dann erst die Gruppierung und das Zählen durchgeführt. Bei einer Datenmenge wie diese, ist dies kein Problem. Bei einer großen Datenmenge kann das sehr wohl ein Problem sein. Stellen Sie sich vor, Sie haben so wie jetzt den Fall, dass Sie nach zwei unterschiedlichen Werten gruppieren möchten, und Sie haben in Ihrer Datenbasis allerdings eine Million Datensätze. In dem Moment, wo das GroupBy im SQL Statement steht, werden vom SQL Server zwei Datensätze zurück übertragen, nämlich jeweils die Gruppe mit der Anzahl. Im Fall ohne GroupBy werden alle Datensätze zurück übertragen, sprich: eine Million oder mehrere Millionen. Und diese Datensätze, die müssen komplett im SQL Server geladen werden, die müssen übers Netzwerk übertragen werden, die werden in den Hauptspeicher Ihres kleines PCs geladen. Das verbraucht natürlich sehr viel Speicher. Zum jetzigen Zeitpunkt ist es allerdings so, dass das Entity Framework Core in der Version 1.0 kein serverseitiges GroupBy unterstützt, sondern GroupBy's werden immer kleinseitig ausgeführt, was bedeutet, dass sämtliche Aggregat-Funktionen kleinseitig ausgeführt werden. Sie sollten sich dieses Umstands bewusst sein, wenn Sie das Entity Framework Core in der Version 1.0 nun einsetzten möchten. Im Zweifelsfall übertragen Sie viel zu große Datenmengen. Sollten sich also dementsprechend vorher Gedanken machen, ob Sie vielleicht serverseitig über einen View oder Ähnliches, den Sie dann mappen, die Möglichkeit haben einfach schon in der Datenbank das GroupBy abzuhandeln. Falls es für Ihre Anwendung kein Problem ist, sehen Sie: GroupBy's oder Aggregat-Funktionen sind gar nicht so schwierig. Der erste Schritt besteht darin, dass ich auf meinem DbSet GroupBy aufrufe und übergebe, wonach ich gruppieren möchte. Und danach muss ich meine Ergebnismenge selektieren. In meinem Fall war das einfach nur der Schlüssel und die Anzahl.

Entity Framework Core Grundkurs

Lernen Sie die Features von Microsofts O/R-Mapper kennen und wie Sie ihn in praktischen Anwendungen einsetzen.

2 Std. 29 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!