Tôi chỉ có thể giả sử bạn đã chết khi sử dụng loại ẩn danh khi câu trả lời được đưa ra bởi Alex Peck là chính xác. (và tôi đã upvoted nó).
Tuy nhiên, điều này tóm tắt thành một cuộc thảo luận về trình biên dịch VB.NET và C#.
Trong VB.NET, khi một kiểu ẩn danh chỉ gặp phải những thuộc tính được khai báo là thuộc tính khóa có thể được sử dụng cho mục đích so sánh. Vì vậy, trong VB.NET mà không có chìa khóa, khi bạn đang cố gắng để làm một so sánh riêng biệt, không có gì sẽ xảy ra.
Read all about it here.
Vì vậy, đầu tiên, để trả lời câu hỏi của bạn, công trình này với loại vô danh:
Dim Countries = From c In List Select New With {Key c.CountryId, c.Country} Distinct.ToList
Đây là lý do tại sao câu trả lời freedompeace của không khá làm việc.
C# tuy nhiên trình biên dịch hơi khác một chút.
Khi gặp phải loại ẩn danh và cần có thao tác so sánh, trình biên dịch C# sẽ ghi đè bằng và GetHashCode. Nó sẽ lặp qua tất cả các thuộc tính công khai của kiểu ẩn danh để tính toán mã băm của đối tượng để kiểm tra sự bình đẳng.
And you can read more about that here.
Hy vọng điều này sẽ trả lời câu hỏi của bạn.
này hóa ra lại là một câu hỏi thú vị Chocol8. – Khepri