Я читал книгу о Linq и видел, что метод Distinct имеет перегрузку, которая берет компаратор. Это было бы хорошим решением проблемы, с которой я хочу получить отдельные объекты из коллекции, но хочу, чтобы сравнение находилось в идентификаторе объекта, даже если другие свойства разные.
В соответствии с книгой, если у меня есть объект Gribulator, я должен был бы создать такой сопоставитель...
private class GribulatorComparer : IComparer<Gribulator> {
public int Compare(Gribulator g1, Gribulator g2) {
return g1.ID.CompareTo(g2.ID);
}
}
... и затем используйте его так:
List<Gribulator> distinctGribulators
= myGribulators.Distinct(new GribulatorComparer()).ToList();
Однако это дает следующие ошибки компилятора...
'System.Collections.Generic.List' не содержит определения для "Distinct" и лучшего метода перегрузки методом "System.Linq.Enumerable.Distinct(System.Collections.Generic.IEnumerable, System.Collections.Generic. IEqualityComparer) имеет некоторые недопустимые аргументы
Аргумент 2: невозможно преобразовать из "LinqPlayground.Program.GribulatorComparer" в "System.Collections.Generic.IEqualityComparer"
Я немного искал и видел множество примеров, которые используют такой код, но не жалуются на ошибки компилятора.
Что я делаю неправильно? Кроме того, это лучший способ сделать это? Я хочу одноразовое решение здесь, поэтому не хочу начинать изменять код для самой сущности. Я хочу, чтобы сущность оставалась как обычно, но только в этом месте, сравнивайте только по ID.
Спасибо за любую помощь.