TOC

This article has been localized into German by the community.

LINQ:

Einleitung

LINQ, kurz für Sprachintegrierte Abfrage, ist eine in das .NET-Framework integrierte Technologie, mit der Sie Daten aus verschiedenen Quellen problemlos abfragen und bearbeiten können. Mit anderen Worten, Sie können mit Daten auf die gleiche Weise arbeiten, unabhängig davon, ob die Quelle eine einfache Liste, ein Wörterbuch, eine XML-Datei oder eine Datenbanktabelle ist. LINQ gibt es in zwei Syntaxvarianten: Die Abfrage- und die Methodensyntax. Wir werden beide im nächsten Artikel ausführlich behandeln, aber damit Sie sich für LINQ begeistern können, lassen Sie mich Ihnen kurz zeigen, wie elegant LINQ eine einfache Datenquelle abfragen kann:

var names = new List<string>()  
{  
    "John Doe",  
    "Jane Doe",  
    "Jenna Doe",  
    "Joe Doe"  
};  

// Get the names which are 8 characters or less, using LINQ  
var shortNames = from name in names where name.Length <= 8 orderby name.Length select name;

foreach (var name in shortNames)  
    Console.WriteLine(name);

In nur einer Zeile kann ich mit der LINQ -Abfragesyntax nach allen Namen in der Liste fragen, die 8 Zeichen (oder weniger) lang sind und sie nach Länge sortieren lassen! Das ist nur eine Zeile Code und es zeigt nur einen kleinen Bruchteil dessen, was LINQ kann! In den nächsten Artikeln werde ich alle erstaunlichen Möglichkeiten durchgesen, die Sie bei der Verwendung von LINQ erhalten, aber zuerst sollten wir ein wenig darüber sprechen, wie und wann eine LINQ-Abfrage ausgeführt wird.

Erweiterte Ausführung

Die meisten Programmierer sind daran gewöhnt, den Code Zeile für Zeile ausgeführt zu sehen, daher könnte es für Sie eine Überraschung sein, dass eine LINQ-Abfrage nicht ausgeführt wird, sobald die Zeile mit dem Abfrageteil erreicht wird. Stattdessen wird LINQ ausgeführt, sobald Sie mit der Verwendung der Daten beginnen, z.B.: Wenn Sie darüber iterieren oder eine Methode wie ToList() oder Count() aufrufen. Das bedeutet auch, dass Sie eine Abfrage über mehrere Zeilen hinweg erstellen können, wobei Sie mehrere Operationen ausführen, die Daten jedoch erst dann abgerufen werden, wenn Sie sie benötigen. Erlauben Sie mir, mit einer erweiterten Version unseres vorherigen Beispiels zu veranschaulichen, in der wir anstelle der vorherigen Abfragesyntax zur Methodensyntax wechseln:

var names = new List<string>()
{
    "John Doe",
    "Jane Doe",
    "Jenna Doe",
    "Joe Doe"
};

// Get the names which are 8 characters or less, using LINQ
var shortNames = names.Where(name => name.Length <= 8);
// Order it by length
shortNames = shortNames.OrderBy(name => name.Length);
// Add a name to the original list
names.Add("Zoe Doe");

// Iterate over it - the query has not actually been executed yet!
// It will be as soon as we hit the foreach loop though!
foreach (var name in shortNames)
    Console.WriteLine(name);

Ich habe dem Code einige Kommentare hinzugefügt, daher sollte es einfach zu befolgen sein. Beachten Sie auch, dass ich einen Beweis hinzugefügt habe: Nach der Abfrage füge ich einen Namen zur ursprünglichen Liste hinzu. Nun, wenn die Abfrage bereits ausgeführt worden wäre, würde dies natürlich nicht zum Ergebnis führen, aber es tut dies, weil es nach der Abfrage hinzugefügt wird, aber BEVOR wir die Daten tatsächlich verwenden, was in der foreach Schleife geschieht.

Das ist nicht sehr wichtig, wenn Sie eine Liste mit 4 oder 5 Namen abfragen, aber stellen Sie sich vor, dass wir stattdessen eine Liste von 10 Millionen Einträgen oder vielleicht eine entfernte Datenbank haben. In diesem Fall ist es sehr wichtig, dass wir nicht mehrere Abfragen ausführen, wenn wir nur eine Abfrage ausführen können.

Zusammenfassung

Mit LINQ können Sie verschiedene Datenquellen einfach und nativ mit der gleichen Syntax abfragen - entweder mit der Abfragesyntax oder mit der Methodensyntax, auf die wir im nächsten Artikel eingehen.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!