Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

LINQ Grundkurs

Aufbau einer LINQ Query

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Wie ist eine LINQ Query grundsätzlich aufgebaut und wie wird sie ausgeführt?
07:05

Transkript

Linq gilt einigen Leuten als Das ist nicht ganz verkehrt, aber ganz richtig ist es auch nicht. Was ich damit meine, sehen wir an diesem Beispiel, indem ich zeigen möchte, dass man auf zwei unterschiedliche Arten Daten mit Linq abfragen kann. Dazu habe ich eine Klasse repository, diese hat eine Eigenschaft Personen und von diesen Personen rufen wir gleich alle Personen ab. Nur am Rande bemerkt, das ist beispielsweise das typische Vorgehen, das wir haben, wenn wir Entity-Framework Würden wir nun SQL schreiben, dann würden wir uns wahrscheinlich zunächst einen String anlegen und dieser String würde dann nicht selten so aussehen, dass wir zunächst Schreiben “SELECT * FROM Personen WHER XYZ“; / und so weiter und sofort. Wenn wir die Expressionsyntax dann sieht das Ganze etwas anders aus. Da gebe ich zunächst die Variable für meine Ergebnismenge an und anschließend starte ich nicht etwa mit select sondern mit from. Und nach from kommt auch nicht die Datenquelle, sondern es kommt eine Variablename, der die Elemente innerhalb der Ergebnismenge kennzeichnet. Also über Person kann ich gleich auf die Eigenschaft jeddes einzelnen Elements zugreifen. Erst nach dem wir einen in geschrieben haben, können wir jetzt die tatsächliche Quelle angeben, also Personen. Um nun Daten abzurufen, müssen wir noch ein select definieren und in dem select geben wir an, was wir abrufen wollen. Also beispielsweise alle Personen. Das hier wäre jetzt ein “SELECT * FROM Person“;. Ich könnte genauso gut von diesen Personen auch einzelne Elemente abrufen, wie zum Beispiel den Namen. Jetzt will ich einfach nur eine Liste aller Namen bekommen. Das ist etwas langweilig, deswegen möchte ich noch eine where-class hinzufügen. Ich möchte nur bestimmte Personen haben. Das tue ich, indem ich das where weil es zeitlich auch vor der Auswahl des tatsächlichen Elements passiert. Also mit diesem select schließen wir sozusagen immer den Befehl ab. Und um den Filter jetzt zu setzen, kann ich direkt auf person zugreifen und mir hier eine Eigenschaft herauspicken, wie zum Beispiel wieder den Namen und sagen, ich möchte nur all die Personen, die den wunderschönen Name “Hendrik“ besitzen. Haben wir jetzt weitere Operationen, dann werden die auch ebenfalls vor das select geschrieben, wie zum Beispiel orderby, um anzugeben, nach was sortiert werden soll. Und ich möchte beispielsweise nach dem Geburtstag sortieren. So funktioniert das immer weiter. Am Anfang geben wir eine Repräsentanz jedes Elements an, dann mit in geben wir die Datenquelle an und anschließend schreiben wir ihrer Ausführungsreihenfolge entsprechend auch weitere Befehle auf, wie zum Beispiel where, um einen Filter zu setzen orderby, um die Sortierung anzugeben und wenn der Befehl abgeschlossen ist, dann ein select. Das ist eine Möglichkeit, um Linq zu verwenden. Die andere Möglichkeit ist die Verwendung von Extension-Methods. Auch hier bekomme ich eine Liste zurück, also eigentlich ein IEnumerable wird hier immer zurückgegeben oder wir haben hier sogar ein IOrderedEnumerable, weil wir ja ein orderby gemacht haben, das zeigt schon an, dass die Befehle sich auch in den Rückgabetypen auswirken. Aber statt jetzt irgendwas von select from, was auch immer, zu schreiben, greife ich direkt auf meine Datenquelle zu, also auf meine Person und rufe auf dieser Menge die entsprechenden Operationen auf. Welche Operationen das sind, sieht man auch wieder hier in der langen Liste, das sind alles Erweiterungsmethoden, die mit Linq mitkommen und wenn ich jetzt einen Filter setzen möchte, dann schreibe ich nicht etwa select sondern Where und gebe den entsprechenden Filter an, indem ich sage, der Name soll "Hendrik" sein. Möchte ich nun sortieren, dann rufe ich ebenfalls orderby auf und dem übergebe ich ebenfalls einen Lambda Expression, mit der ich Aussage, was ich denn letztendlich sortieren möchte. Für diejenigen, die das interessant finden, man spricht an dieser Stelle von einem Prädikat, da wir nur ein true oder false zurückgeben, in diesem Fall oder auch wenn wir diesen Fall betrachten, dann sprechen wir immer von einer Projektion, weil wir die eingehenden Daten auf die Daten projizieren, die letztendlich weiterverarbeitet werden, aber das nur am Rande. Wann verwendet man nun welches Vorgehen. Dieses Vorgehen hier unten, mit den Extension-Methods, das eignet sich vor allem dann, wenn man sehr einfache Befehle hat. Also das, was hier haben, ist zum Beispiel ziemlich typisch. Sobald es aber komplexer wird und gerade auch, wenn man unterschiedliche Abfragen miteinander kombinieren möchte, dann eignen sich die Extension-Methods nicht so sehr, denn das würde ziemlich komplex. Das möchte ich jetzt an einem anderen Beispiel zeigen. Dafür habe ich dann auch schon etwas vorbereitet und zwar möchte ich nun all die Personennamen, die in einer Liste enthalten sind und deren Anfangsbuchstabe S ist. Ich prüfe also nicht mehr den Hendrik sondern ich prüfe gegen eine eingeschränkte Menge dieser Liste. Das hier unten zu schreiben, wäre ganz schön anstrengend, das hier zu schreiben, Bedarf einfach nur einer weiteren from-class und einer weiteren where-Anweisung. Ich sage also, der Name muss unbedingt mit S anfangen und dann prüfe ich den Namen, den ich hier habe gegen den Namen da oben. Das ist nicht ganz optimal, aber es soll uns rein weck einmal ein Beispiel dafür sein, wie man letztendlich diese Abfragen miteinander kombinieren kann. Wir können auch joints verwenden und so weiter und sofort. Und durch die Schreibweise die wir hier haben, mit den entsprechenden Schlüsselwörtern wird es zumindest den Personen ersichtlicher, was darin passiert, die sich auch mit SQL auskennen. Meiner Meinung nach kann man mit dieser Syntax vor allem sehr komplexe Relationen nachvollziehbar abbilden, mit dieser hier unten gelingt das meistens nicht ganz so gut.

LINQ Grundkurs

Lernen Sie die LINQ-Operationen kennen und erstellen Sie praktische Abfragen direkt in C# und .NET.

2 Std. 10 min (26 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:24.10.2016

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!