Tôi đã đọc một cuốn sách về Linq, và thấy rằng phương pháp Distinct có một quá tải mà phải mất một so sánh. Đây sẽ là một giải pháp tốt cho một vấn đề tôi có nơi tôi muốn có được các thực thể riêng biệt từ một bộ sưu tập, nhưng muốn so sánh được trên ID thực thể, ngay cả khi các thuộc tính khác là khác nhau.Làm cách nào để sử dụng trình so sánh tùy chỉnh với phương pháp Linq Distinct?
Theo cuốn sách, nếu tôi có một thực thể Gribulator, tôi sẽ có thể tạo ra một Comparer như thế này ...
private class GribulatorComparer : IComparer<Gribulator> {
public int Compare(Gribulator g1, Gribulator g2) {
return g1.ID.CompareTo(g2.ID);
}
}
... và sau đó sử dụng nó như thế này ...
List<Gribulator> distinctGribulators
= myGribulators.Distinct(new GribulatorComparer()).ToList();
Tuy nhiên, điều này mang đến cho các lỗi biên dịch sau đây ...
'System.Collections.Generic.List' không chứa một định nghĩa cho 'biệt' và phần mở rộng phương pháp quá tải tốt nhất 'System.Linq.Enumerable .Distinct (System.Collections.Generic.IEnumerable, System.Collections.Generic.IEqualityComparer) 'có một số đối số không hợp lệ
Đối số 2: không thể chuyển đổi từ' LinqPlayground.Program.GribulatorComparer 'thành' System.Collections.Generic.IEqualityComparer '
Tôi đã tìm kiếm xung quanh một chút và đã thấy nhiều ví dụ sử dụng mã như thế này, nhưng không có khiếu nại về lỗi trình biên dịch.
Tôi đang làm gì sai? Ngoài ra, đây có phải là cách tốt nhất để làm điều này? Tôi muốn một giải pháp một lần ở đây, vì vậy không muốn bắt đầu thay đổi mã cho chính thực thể đó. Tôi muốn thực thể vẫn giữ nguyên như bình thường, nhưng chỉ ở một nơi này, so sánh chỉ với ID.
Cảm ơn bạn đã được trợ giúp.
Quên thêm, tôi đang sử dụng VS2012, và .NET 4.0 trong C# –