Solo puedo suponer que está completamente equivocado en el uso del tipo anónimo ya que la respuesta dada por Alex Peck es correcta. (y lo he subido)
Sin embargo, esto se reduce a una discusión del compilador VB.NET vs C#.
En VB.NET, cuando se encuentra un tipo anónimo, solo se pueden utilizar las propiedades declaradas como propiedades clave para fines de comparación. Entonces, en VB.NET sin clave, cuando intenta hacer una comparación clara, no ocurrirá nada.
Read all about it here.
Así que, primero, para responder a su pregunta, esto funciona con tipos anónimos:
Dim Countries = From c In List Select New With {Key c.CountryId, c.Country} Distinct.ToList
Esta es la razón por la respuesta de freedompeace no funciona bien.
C# sin embargo, el compilador es un poco diferente.
Cuando se encuentra un tipo anónimo y se necesita una operación de comparación, el compilador C# anula Equals y GetHashCode. Se iterará sobre todas las propiedades públicas del tipo anónimo para calcular el código hash del objeto para probar la igualdad.
And you can read more about that here.
la esperanza que esto responda a su pregunta.
Esto resultó ser una cuestión interesante Chocol8. – Khepri