Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

LINQ Grundkurs

Elementabfragen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Während Select dazu dient, Datenmengen abzurufen, gibt es auch Befehle, um einzelne Elemente zu ermitteln.
08:05

Transkript

Neben der Selektierung von Listen über den select-Befehl gibt es auch die Möglichkeit, Elemente zu selektieren. Und genau die Befehle schauen wir uns jetzt an. Dafür verwende ich das C# Interactive Window aus Visual Studio 2015. Mit dem kann ich recht einfach Befehle ausführen. Das hilft der Übersicht der Beispiele. Darüber hinaus habe ich schon zwei Listen angelegt. Und zwar integers, das ist eine Liste mit den Zahlen 1 bis 5. Wobei ganz wichtig ist: Die 4 ist doppelt enthalten. Und wir haben eine personen-Liste, die keine Elemente hat. Der erste Befehl, mit dem wir beginnen, trägt praktischerweise den Namen First und gibt mir im einfachsten Fall das allererste Element zurück. Ganz interessant ist, was passiert, wenn er kein solches Element findet. Das können wir zum Beispiel bei personen sehen. Dann gibt es eine Excpetion, weil die Liste enthält ja kein Element und demnach kann auch kein erstes Element zurückgegeben werden. Neben diesem einfachen Aufruf können wir außer First noch ein Prädikat übergeben. Mit diesem Prädikat können wir dann zum Beispiel nach all den Personen suchen, die den Namen Hendrik haben, und uns von diesen wiederum das erste Elemente zurückgeben lassen. Auch das gibt jetzt eine Exception, weil meine Liste natürlich leer ist, immer noch leer ist, und daher auch kein Element gefunden werden kann. Man kann sich das so vorstellen, dass es eigentlich immer ein Prädikat gibt, das ausgeführt wird. Nur im Fall First nimmt er dann den Index 0, insofern er vorhanden ist. In dem Fall, den Sie spezifizieren, wird natürlich das Prädikat ausgeführt, das hier drinsteht. Und daher sind manchmal die Fehler recht ähnlich. Wenn Sie diese Exceptions nicht haben wollen, können Sie auf die Methode FirstOrDefault zurückgreifen. Die verhält sich im Grunde genauso wie First, nur mit dem Unterschied, dass im Fehlerfall keine Exception geworfen wird, sondern es wird ein Standardwert zurückgegeben. Dieser Standardwert ist für Referenztypen immer null und für Datentypen wie int, float und so weiter ist das meistens 0 beziehungsweise 0,0. Neben First gibt es noch den Last-Befehl. Der verhält sich genauso wie First, nur mit dem Unterschied, dass die Liste von hinten nach vorne durchsucht wird und damit also das letzte Element seiner Art gefunden wird. Beziehungsweise, wenn gar kein Element gefunden wird, wird halt wieder eine Exception geworfen. Auch das verhält sich genauso wie bei First. Für Last gibt es auch ein LastOrDefault. Dann wird ein Standardwert zurückgegeben. Kommen wir noch zu Single. Single funktioniert so ähnlich wie First. Es hat auch zwei Überladungen. Im einfachsten Fall wird nachgeschaut, ob es nur ein Element in der Liste gibt. Das macht man eher selten. In dem Fall gibt es eine Exception, weil es sind ja insgesamt sechs Elemente. Viel häufiger verwendet man das Ganze mit einem Prädikat. Dann wird sowohl das Element zurückgegeben, als auch geprüft, ob dieses Element auch nur ein einziges Mal existiert. Rufe ich Single jetzt zum Beispiel für die 4 auf, dann gibt es wieder eine Exception. Solche Exceptions können wir vermeiden, indem wir wieder die Default-Variante nutzen, das heißt SingleOrDefault. Dabei ist aber zu beachten, dass der Default-Wert nur verwendet wird, wenn das Element gar nicht gefunden wird. Nutzen wir SingleOrDefault für einen Wert, der mehrfach in der Liste vorkommt, kommt es zu einer Exception. Also, bei Single ist vor allem die Prüfung wichtig, ob ein Element schon vorhanden ist, und wenn es doppelt vorhanden ist, kommt es immer zu einer Exception, beziehungsweise wenn mehr als ein Element vorhanden ist, das den Filterkriterien entspricht, kommt es immer zur Exception. Mit SingleOrDefault können wir einen Default-Wert zurückgeben, falls kein Element gefunden wird, oder das Element selbst, wenn es gefunden wird und nur einmal in der Liste enthalten ist. Der nächste Befehl, den wir uns ansehen, ist ElementAt. Mit ElementAt können wir auf ein Element in der Liste zugreifen. Das Ganze funktioniert ziemlich ähnlich zum Indexzugriff, wie man ihn eventuell schon kennt. Das bedeutet, dass es auch zu einer Exception kommt, wenn wir einen Index verwenden, der außerhalb des Bereichs liegt. Denn dann greifen wir in einen Speicherbereich, der gar nicht von der Liste berücksichtigt wird, und es kommt zu Fehlern. Will man das vermeiden, nutzt man ElementAtOrDefault. In dem Fall wird ein Default-Wert immer dann zurückgegeben, wenn der Index, der angegeben wurde, nicht mehr in dem Bereich des eigentlichen Listenindexes liegt. Der letzte Befehl, den wir uns ansehen wollen, ist DefaultIfEmpty. Wird der auf einer befüllten Liste aufgerufen, also einer Liste, die mindestens ein Element hat, dann erhält man als Ergebnis genau diese Liste zurück. Ist die Liste jedoch leer, dann erhält man eine Liste mit einem Element, welches einen Default-Wert kennzeichnet. Das heißt, ich habe jetzt eine Liste von Personen, die einen Eintrag hat. Aber der Eintrag selbst ist null, das ist wichtig. Es ist nicht so, dass man eine leere Liste oder ein null zurückbekommt, sondern man erhält eine Liste, diese hat einen Eintrag und der ist null. Dieses Verhalten ist etwas ungünstig, da man nicht unbedingt null-Einträge in seinen Listen haben möchte. Aus dem Grund gibt es die Möglichkeit, hier einen Default-Wert anzugeben, der genutzt wird, insofern die Liste leer ist. Der Grund, warum hier jetzt nur "Person:" steht, ist, weil ich auf den Namen der Person zugreife. Und dieser Name wurde ja von mir nicht gesetzt. Und daher steht hier auch an der Stelle nichts. Sie haben jetzt gesehen, wie Sie auf einzelne Elemente zugreifen können. Ich finde diese Funktion sehr praktisch, da man durchaus damit weniger Fehler macht, weniger Exceptions eventuell generiert und Sie somit zu einem sichereren Arbeiten führen können, selbst wenn man nicht allzu komplexe Abfragen erstellt.

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!