Deutlich in LINQ anonyme Datentypen (die in VB.NET)
Angenommen, dass die referenzierten List
unten enthält 2 Elemente:
Dim Countries = From c In List _
Select New With { .Country = c.Country, .CountryID = c.CountryID }
den obigen code gibt
.Country=Spain .CountryID = 1
.Country=Spain .CountryID = 1
Wie kann ich die unterschiedlichen Werte? Die Countries
Abfrage sollte nur
.Country=Spain .CountryID = 1
- Dies stellte eine interessante Frage Chocol8.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nur annehmen, du bist tot-set auf die Verwendung von anonymen Typ als die Antwort von Alex Peck, der richtige ist. (und ich habe es von Ihnen positiv bewertet werden).
Jedoch, dies läuft darauf hinaus, eine VB.NET vs C# - compiler Diskussion.
In VB.NET wenn ein anonymer Typ begegnet, die nur die deklarierten Eigenschaften als Schlüssel-Eigenschaften können zu Vergleichszwecken herangezogen werden. So in VB.NET ohne Schlüssel, wenn Sie versuchen zu tun, einen deutlichen Vergleich, geschieht nichts.
Lesen Sie alles darüber hier.
Also erstmal, um deine Frage zu beantworten, das funktioniert mit anonyme Typen:
Dies ist der Grund, warum freedompeace Antwort nicht ganz funktioniert.
C# aber der compiler ist ein wenig anders.
Wenn ein anonymer Typ ist aufgetreten und ein Vergleich Betrieb benötigt der c# - compiler überschreibt Equals und GetHashCode. Es iteriert durch alle öffentlichen Eigenschaften des anonymen Typs auf die Berechnung des Objekts hash-code-test für die Gleichheit.
Und Lesen Sie mehr darüber hier.
Hoffe, das beantwortet Ihre Frage.
Dies funktioniert für mich, wenn ich nicht mehr auf die Letzte Zeile im debugger:
Distinct muss irgendwie wissen, welche Objekte identisch sind. Wählen Sie anonyme Objekte hier, weiß es gar nicht, die sind gleich. Ich schrieb nie eine Zeile VB.Net aber ich habe versucht, etwas, und es funktioniert:
In Ihrem Fall:
Es ist die LINQ-Betreiber namens Distinct(), die Sie aufrufen können, etwa so:
Mehr Informationen auf Verschiedene hier