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.
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.
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%Es gibt den LINQ-Operator namens Distinct (), den Sie wie folgt aufrufen können:
%Vor%Weitere Informationen zu Distinct hier
Tags und Links .net linq vb.net linq-to-objects distinct