Kann mir bitte jemand den Unterschied zwischen den beiden folgenden LINQ-Aussagen sagen?
%Vor%und
%Vor% ChkUnique != null
gibt false
für die erste zurück, wenn eine Übereinstimmung nicht gefunden werden kann und true
für letztere, und ich kann nicht herausfinden, warum dies passiert.
Ich bin neu bei LINQ, also hätte ich etwas wirklich Grundlegendes verpasst, aber es macht mich im Moment verrückt.
Der zweite Code gibt ein Objekt zurück, das die von Ihnen aufgerufene Abfrage darstellt. es wird niemals null sein. Obwohl es einmal aufgezählt wurde, könnte es eine leere Sammlung sein. (immer noch nicht null)
Der erste Aufruf von FirstOrDefault bewirkt, dass ein einzelnes Ergebnis in eine einzige Variable umgewandelt wird und null zurückgegeben wird, wenn keine Ergebnisse vorliegen. Wenn Sie Where
anstelle von FirstOrDefault
hätten, hätten Sie beide Male das gleiche Ergebnis.
Die erste Anweisung verwendet die Erweiterungsmethode und die zweite lautet LINQ Query Expression .
Gibt in Ihren ersten Methoden FirstOrDefault
das erste Element einer Sequenz oder einen Standardwert zurück, wenn die Sequenz keine Elemente enthält. Hier arbeiten Sie an Objekten, so dass Ihre Standardrückgabe NULL
ist, wenn Ihr Ergebnis kein Element enthält.
Andererseits gibt Ihre zweite Anweisung immer IEnumerable<T>
collection type value zurück und wird niemals null. Sie können nur überprüfen, ob die Sammlung Objekte enthält, indem Sie die Count
-Eigenschaft der Sammlung verwenden.
Wenn Sie die Extension-Methode .Where()
in Ihrer ersten Anweisung verwenden, entspricht sie der zweiten.
Überprüfen Sie die angegebenen Links auf Detailinformationen und Unterschiede.