Я читал книгу о 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
Я немного поискал и видел множество примеров, в которых используется подобный код, но никаких жалоб на ошибки компилятора.
Что я делаю неправильно? Кроме того, это лучший способ сделать это? Я хочу здесь одноразовое решение, поэтому не хочу начинать изменять код самой сущности. Я хочу, чтобы сущность оставалась нормальной, но только в одном месте, сравнивайте только по идентификатору.
Спасибо за любую помощь.