Ich weiß, dass dies Linq ist:
var _Results = from item in _List
where item.Value == 1
select item;
Und ich weiß, das ist Lambda:
var _Results = _List.Where(x => x.Value == 1);
Anmerkung des Herausgebers: Das Obige ist nicht nur Lambda, sondern Linq unter Verwendung der "Methodensyntax", deren Prädikat ein Lambda ist. Um klar zu sein, beide oben genannten Beispiele sind Linq (mein ursprünglicher Beitrag war falsch, aber ich habe den Fehler hinterlassen, um die Verwirrung zu veranschaulichen, die die Frage aufwirft).
Aber ist Linq eine Untergruppe von Lambda oder was?
Warum gibt es zwei scheinbar identische Techniker?
Gibt es einen technischen Grund, sich für einen anderen zu entscheiden?
Antworten:
Dies ist LINQ (unter Verwendung der Abfragesyntax):
Dies ist auch LINQ (unter Verwendung der Methodensyntax):
Es ist interessant festzustellen, dass diese beiden Geschmacksrichtungen am Ende genau denselben Code produzieren. Der Compiler bietet Ihnen einen Service, indem er es Ihnen ermöglicht, Ihre Wünsche in der von Ihnen bevorzugten Weise auszudrücken.
Und das ist ein Lambda:
Wenn Sie sich für die Methodensyntax entscheiden, wird LINQ fast immer um Lambda-Ausdrücke herum angezeigt. Aber LINQ und Lambdas sind zwei völlig verschiedene Dinge, die beide für sich verwendet werden können.
Update: Wie svick zu Recht hervorhebt, wird LINQ mit Abfragesyntax auch mithilfe von Lambda-Ausdrücken implementiert (wie bereits erwähnt, können Sie mit dem Compiler die Abfragesyntax schreiben, diese jedoch effektiv hinter Ihrem Rücken in Methodensyntax umwandeln). Dies beruht nur auf der Tatsache, dass beide Geschmacksrichtungen völlig gleichwertig sind und sich gleich verhalten (z. B. können Lambda-Ausdrücke dazu führen, dass Verschlüsse erstellt werden).
quelle
Beide sind Linq. Der zweite benutzt Lambdas .
Lambdas sind Dinge vom Typ Inline-Methode, die Sie im zweiten Beispiel als Parameter an die Where-Funktion übergeben.
Der Unterschied zwischen diesen beiden Syntaxen ist rein syntaktisch. Der zweite Linq-Stil, der Methodenaufrufe verwendet, ist die Funktionsweise unter der Haube. Der erste soll benutzerfreundlicher / einfacher sein und der Compiler konvertiert ihn hinter den Kulissen in Methodenaufrufe. Sie sollten für jede Abfrage gleich funktionieren, obwohl der Compiler natürlich eine etwas andere Interpretation einer komplizierten Linq-Abfrage wählen kann als bei der Konvertierung in den Methodenstil.
Dieser msdn-Artikel könnte auch von Interesse sein: LINQ-Abfragesyntax versus Methodensyntax . Von besonderer Relevanz ist: "Im Allgemeinen empfehlen wir die Abfragesyntax, da sie normalerweise einfacher und besser lesbar ist. Es gibt jedoch keinen semantischen Unterschied zwischen Methodensyntax und Abfragesyntax."
quelle