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

LINQ Grundkurs

Konvertierung

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
LINQ arbeitet intern mit vielen unterschiedlichen Datentypen. Mit diesen Funktionen können Sie diese Typen untereinander konvertieren.
06:57

Transkript

Oft genug merken wir bei LINQ gar nicht, was alles im Hintergrund passiert. Es werden häufig Daten in unterschiedliche Listenobjekte hin und her konvertiert. Diese Konvertierungen können wir uns selbst zunutze machen, weil wir können sie auch aufrufen. Schauen wir uns an, wie das geht und was uns bereitgestellt wird. Dafür habe ich zwei Listen angelegt, eine mit Integer-Werten und eine für Personen. Was letztlich da drin ist, ist für dieses Tutorial nicht wichtig. Gehen wir zuerst auf liste. Da sind einfach nur Integers drin und hier kann ich AsEnumerable aufrufen. Das macht aus meiner Liste ein IEnumerable . In meinem Fall ist das ziemlich blödsinnig, weil List natürlich IEnumberable bereits implementiert. Aber das ist vor allem dann hilfreich, wenn Sie es mit Klassen zu tun haben, die zwar IEnumerator implementieren, und wir sie dadurch mit ForEach durchlaufen können, aber die eben nicht IEnumerable implementieren, wodurch wir dann weitere LINQ-Abfragen auf diesen Klassen machen können. Denn die LINQ-Abfragen sind weitestgehend auf IEnumerable festgeschrieben. Also, falls Sie Listen haben, mit denen Sie LINQ nicht verwenden können, probieren Sie es einfach mal mit AsEnumerable. Weiterhin können wir mit ToArray ein Array erzeugen, das sehen wir an dieser Stelle, also das gute alte Array, wie wir das hier haben, ein int-Array. Dies hat die Besonderheit, dass wir dort bis auf die LINQ-Abfragen ziemlich wenige Funktionen haben, mit denen wir die Daten verarbeiten können. Arrays eignen sich vor allem immer dann, wenn wir sehr eingeschränkte Änderungen and Daten vornehmen wollen, beziehungsweise wenn wir es mit Datenkonvertierungen zu tun haben, die sich auf den kleinsten gemeinsamen Nenner konzentrieren müssen, zum Beispiel wenn wir zwischen unterschiedlichen Systemen Daten hin und her schieben. Wollen wir die Inhalt verändern, eignet sich ToList. Mit ToList haben wir die Möglichkeit, zum Beispiel auch Elemente hinzuzufügen oder zu entfernen. Tatsächlich werden diese Änderungen dann aber nicht auf der Liste durchgeführt, die wir hier sehen, sondern es wird mit ToList eine neue Liste erzeugt, in der die entsprechenden Inhalte drin sind. Würde ich hier also ein Remove aufrufen von 4, wäre die 4 immer noch in meiner Liste enthalten. Listen eignen sich immer dann, wenn wir Veränderungen vornehmen wollen. Sie werden nicht ganz so gern verwendet bei reinen Getter Properties. Dort greift man eher auf IEnumerable zurück, welches wir mit AsEnumerable erzeugen können. Kommen wir zu einem komplexeren Fall. Und zwar wollen wir ein Dictionary erzeugen. Dafür nehme ich mein Personenobjekt und rufe ToDictionary auf. Ein solches Dictionary hat die Eigenschaft, dass es aus sogenannten Key-Value Pairs besteht. Das heißt, es gibt immer einen Schlüssel und zu jedem Schlüssel ist auch genau ein Objekt zugeordnet. Bei einem ToDictionary muss ich also eine Art Mapping oder Gruppierung angeben. Das mache ich über einen Lambda-Ausdruck, dem ich dann angebe, welche Eigenschaft der Elemente in der Liste für den Key verwendet werden soll. Das ist bei mir der Name. Dadurch kann ich jede Person über das Dictionary mit ihrem Namen identifizieren. Ganz ähnlich und doch etwas anders funktioniert ein LookUp. Bei LookUp muss ich auch einen keySelector angeben. Mache ich mal auf Name. Das, was wir dort zurückbekommen, ist wiederum so ähnlich wie das Key-Value Pair, nur dass wir hier zwar einen Key bekommen, das sehen wir dort mit ILookup. Unser Key ist ein String. Aber die Elemente, die wir bekommen, sind keine Zuordnung zwischen String und Person, sondern sie sind nochmal gekapselt in ein ILookup. Und ein ILookup implementiert selbst IEnumerable. Wir können also durch das, was wir dort zurückbekommen, pro Element, ich hole mir mal das erste Element, können wir auch hier wieder entsprechende Listenoperationen durchführen. Man kann sich dieses Lookup so vorstellen wie eine Liste von Listen, wobei jede einzelne Liste durch einen entsprechenden Schlüssel identifiziert wird. Das waren die Konvertierungsoperationen in bestimmte Listentypen. Es geht aber noch etwas weiter. Man kann beispielsweise auf einer Liste auch sagen, dass alle Inhalte von einem bestimmten Typ sein sollen. Also sagt man OfType. Hier muss man den entsprechenden Typ angeben. In meinem Fall ist das einfach mal object. Damit kann ich dann all die Elemente zurückgeben, die vom entsprechenden Typ sind. Bei mir würden jetzt natürlich alle Werte zurückgegeben, weil int auch von object erbt. Wenn wir aber zum Beispiel diverse Objekthierarchien haben, wie dass Person sich noch in Angestellter und in Kunde aufteilt, dann könnte ich mir aus einer Liste aller Personen nur die Kundenobjekte oder nur die Angestelltenobjekte zurückgeben. Noch anders funktioniert es, wenn ich zum Beispiel alle Angestellten habe. Dann könnte ich diese auch casten in Personenobjekte. Das mache ich jetzt für meine Liste so, dass ich die probiere in float zu wandeln. Denn da fällt uns eine Besonderheit auf: Sobald ich das mache, kommt es zu einem Fehler. Der Cast funktioniert tatsächlich nur auf der entsprechenden Objekthierarchie, Vererbungshierarchie. Er funktioniert nicht über Typgrenzen hinweg. Kann etwas nicht konvertiert werden, kommt es zu einer Exception, wie wir sie hier sehen. Wir müssen also bei unserer Liste einen Cast auf object vornehmen. Dann funktioniert das Ganze auch. Weil eben int von object erbt. Sie haben also gesehen, wie Sie Ihre Daten konvertieren können und worauf gerade bei Cast zu achten ist, wenn Sie das tun.

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!