Я могу только предположить, что вы не можете использовать анонимный тип, поскольку ответ Алекса Пека верен. (и я проголосовал за это).
Однако это сводится к обсуждению компилятора VB.NET против C #.
В VB.NET, когда встречается анонимный тип, для сравнения можно использовать только те свойства, которые объявлены как ключевые свойства. Так что в VB.NET без ключа, когда вы пытаетесь провести четкое сравнение, ничего не произойдет.
Узнайте все об этом здесь.
Итак, сначала, чтобы ответить на ваш вопрос, это работает с анонимными типами:
Dim Countries = From c In List Select New With {Key c.CountryId, c.Country} Distinct.ToList
Вот почему ответ Liberpeace не совсем работает.
C #, однако компилятор немного отличается.
Когда встречается анонимный тип и требуется операция сравнения, компилятор c # переопределяет Equals и GetHashCode. Он будет перебирать все открытые свойства анонимного типа, чтобы вычислить хеш-код объекта для проверки на равенство.
А об этом вы можете прочитать здесь.
Надеюсь, что это отвечает на ваш вопрос.