Ich gehe einige LINQ-Beispiele aus einem Buch über MVC durch und frage mich, welchen Zweck die Auswahl unten haben könnte. Vielleicht ist es ein Tippfehler, aber ich sehe keine Erwähnung in den Errata des Buches.Möglicher Zweck der LINQ-Auswahl (x => x)
foreach(Product p in products
.Where(e => e.Name == productParam.Name)
.Select(e => e)) {
p.Price = productParam.Price;
}
Getestet habe ich aus zwei Beispiele dafür, wo die .Select (e => e) enthalten war und eine, wo es nicht und der Code war die gleiche ist. Da Where das durch das Prädikat gefilterte IEnumerable zurückgibt, wann wäre dann der select-Aufruf (mit dem spezifischen Prädikat oben) jemals notwendig? Macht es tatsächlich etwas? Könnte es in einem komischen Fall sein?
Ich denke nur, wenn Sie die generischen Argumente explizit definiert haben und der Rückgabewert ein implizit konvertierbarer Wert aus der Quelle war. Sie könnten auch Breakpoints für das Debugging plausibel einbeziehen (vielleicht würden Sie dafür geschweifte Klammern und eine neue Zeile benötigen). Aber außer diesen (vor allem, da keiner von beiden tatsächlich in dem von Ihnen geposteten Code vorkommt), kann ich mir keinen sinnvollen Zweck dafür vorstellen. Vielleicht eine faule Umwandlung der Linq-Abfragesyntax? –
Dies ist eigentlich ein häufiger Fehler. Noch üblicher ist es, ToList auf alles zu schlagen. Leute verstehen das Ausführungsmodell von LINQ-Abfragen im Allgemeinen nicht (was verständlich ist). – usr
@usr Ich wünschte, es gäbe eine (Standard) 'Force'-Erweiterung, aber es gibt viele Male, wenn eine Bewertung eines IQuerable/IEnumerable erzwungen werden muss, auch wenn Sie * wirklich * an einer Liste nicht interessiert sind. Der Name würde es auch offensichtlicher für die gewünschte Operation machen. –