Unterscheidbar in LINQ mit anonymen Typen (in VB.NET)

7

Angenommen, die referenzierte List enthält 2 Elemente:

%Vor%

Der obige Code gibt

zurück %Vor%

Wie kann ich die verschiedenen Werte erhalten? Die Abfrage Countries sollte nur

enthalten %Vor%     
OrElse 02.07.2011, 09:06
quelle

5 Antworten

32

Ich kann nur annehmen, dass Sie auf die Verwendung von anonymem Typ eingestellt sind, da die Antwort von Alex Peck korrekt ist. (und ich habe es upvoted).

Dies läuft jedoch auf eine VB.NET vs C # Compiler Diskussion hinaus.

Wenn in VB.NET ein anonymer Typ gefunden wird, können nur die Eigenschaften, die als Schlüsseleigenschaften deklariert sind, zu Vergleichszwecken verwendet werden. Wenn Sie in VB.NET ohne Schlüssel versuchen, einen eindeutigen Vergleich durchzuführen, wird nichts passieren.

Lesen Sie alles hier.

Also zuerst, um Ihre Frage zu beantworten, funktioniert dies mit anonymen Typen:

%Vor%

Aus diesem Grund funktioniert die Antwort von freedompeace nicht ganz.

C # aber der Compiler ist ein bisschen anders.

Wenn ein anonymer Typ angetroffen wird und eine Vergleichsoperation erforderlich ist, überschreibt der c # -Compiler Equals und GetHashCode. Es wird über alle öffentlichen Eigenschaften des anonymen Typs iterieren, um den Hash-Code des Objekts zu berechnen, um auf Gleichheit zu prüfen.

Und Sie können mehr darüber lesen hier.

Hoffe das beantwortet Ihre Frage.

    
Khepri 02.07.2011, 09:32
quelle
5
%Vor%

Das funktioniert für mich, wenn ich in der letzten Zeile im Debugger stoppe:

%Vor%     
Alex Peck 02.07.2011 09:13
quelle
2

Distinct muss irgendwie wissen, welche Objekte gleich sind. Sie wählen anonymous objects hier, es weiß nicht, welche gleich sind. Ich habe nie eine einzige Zeile von VB.Net geschrieben, aber ich habe etwas versucht, und es funktioniert:

%Vor%

In Ihrem Fall:

%Vor%     
Peter Porfy 02.07.2011 09:45
quelle
2

Es gibt den LINQ-Operator namens Distinct (), den Sie wie folgt aufrufen können:

%Vor%

Weitere Informationen zu Distinct hier

    
Diana Ionita 02.07.2011 09:11
quelle
1
%Vor%     
foxy 02.07.2011 09:12
quelle