LINQ - Unterschiedlicher Syntax-Stil, anderes Ergebnis?

8

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.

    
Permas 15.12.2011, 04:53
quelle

2 Antworten

10

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.

    
Andrew Barber 15.12.2011, 05:33
quelle
1

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.

    
Niranjan Kala 15.12.2011 06:25
quelle

Tags und Links