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

Lazy Evaluation

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die verzögerte Ausführung von Abfragen ist eines der wichtigsten Leistungsmerkmale von LINQ. Sie hat aber auch ihre Tücken.
05:16

Transkript

Ein Vorteil von LINQ ist das sogenannte Lazy Evaluation. Dies möchte ich Ihnen zeigen. Dafür habe ich das Programm LINQPad geöffnet. Denn mit LINQPad kann ich mir diverse Statusinformationen abrufen, die zu einer LINQ Query entstehen. Ich kann außerdem sehen, welches SQL abgerufen wird und mich sehr einfach mit einer Datenbank verbinden über das Entity Framework. Die Datenbank, die ich nutze, hat eine "Persons"-Tabelle. In dieser "Persons"-Tabelle sind nur zwei Spalten, "Id" und "Name". Wie bei Entity Framework üblich, muss ich mir zuerst einen Datenkontext erzeugen. Das ist meine Schnittstelle zur Datenbank. Und jetzt kann ich meine Anfragen über diesen Kontext stellen. Zuerst rufe ich alle möglichen Personen ab. Das mache ich auf bekannte Weise: "from person in context.Persons" "select person;" Gut, das Ganze ist jetzt ein wenig verdenglischt, indem hier "personen" steht und dort "person". Aber kein Problem. Hier sehen wir auch, dass eine ganze Menge SQL generiert wurde. Das liegt daran, dass zuerst eine Verbindung mit der Datenbank aufgebaut werden musste, um überhaupt Daten abfragen zu können. Wenn ich jetzt die ganze Abfrage nochmal starte, wird das SQL-Fenster auch geleert. Denn tatsächlich passiert in diesem Umfeld überhaupt nichts. Wobei: "Überhaupt nichts" stimmt nicht. Denn wir haben eine Query erstellt und diese Query wird in eine Variable gespeichert. Erst wenn ich auf diese Variable zugreife, um wirklich Daten abzurufen, zum Beispiel durch einen "Dump"-Befehl, dann wird wirklich ein SQL an die Datenbank gesendet. Dieser "Dump"-Befehl ist nicht Teil von LINQ oder .NET, sondern er ist Teil von LINQPads und erlaubt die Ausgabe der Daten. Hier sehen wir auch, die Tabelle enthält einen Namen und ID. Hier sind mehrere Elemente drin, zum Beispiel zweimal Hendrik, jeweils mit unterschiedlicher ID. Wir haben also jetzt die Daten von der Datenbank abgerufen. Genau das ist im Grunde das, was wir mit Lazy Evaluation meinen. Denn wenn ich jetzt zum Beispiel, auf "personen" eine weitere Anfrage mache, nehmen wir einmal "First", dann werden tatsächlich zwei SQL Queries ausgelöst, also zwei Abrufe an die Datenbank. Der erste ist für meinen "Dump"-Befehl, um alle Daten abzurufen. Der zweite ist, um das erste Element abzurufen. Hier sehen wir das auch: "SELECT TOP (1)" ist genau dafür da, um das allererste Element abzurufen. Während hier ist die Einschränkung nicht, dadurch bekommen alle Elemente zurück. Das kann hilfreich sein, es kann aber auch stören, weil wir eventuell nicht wollen, dass immer alle möglichen Daten abgerufen werden. Sondern vielleicht wollen wir sie lokal zwischenspeichern. Das können wir machen, indem wir die Daten in einer eigenen Liste speichern. Dafür rufe ich bei "personen" die "ToList"-Funktion auf. Und anschließend führe ich "First" nicht auf der "personen"-Liste aus, sondern auf den "lokalePersonen". Jetzt habe ich nur noch einen SQL-Aufruf, und zwar genau den mit dem "Select-Stern". Das kann, wie gesagt, durchaus hilfreich sein. Es kann auf der anderen Seite aber auch hinderlich sein, wenn wir dann detailliertere Abfragen machen. Stellen wir uns vor: Wir wollen die Personen abrufen, die Hendrik mit Vornamen heißen. Schicken wir das jetzt ab, wird tatsächlich immer noch nur eine Abfrage gemacht. Denn diese Filteraktion wird auf den Daten im lokalen Speicher ausgeführt und nicht auf der Datenbank. Erst wenn ich das ändere, kann die Datenbank entsprechend optimieren, indem sie die Filter auch wirklich an die Datenbank weiterleitet. Sie müssen also durchaus vorsichtig damit sein, wann Sie dieses "ToList", "ToArray", "First" und "Ähnliches" aufrufen, weil diese jedes Mal die entsprechenden Daten abrufen. Und gerade "ToList" und "ToArray" sind gefährlich, weil sie wirklich alle Daten abrufen, die mit einer Query in Verbindung stehen.

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!