Stavo leggendo un libro su Linq e ho visto che il metodo Distinct ha un sovraccarico che richiede un confronto. Questa sarebbe una buona soluzione per un problema che ho dove voglio ottenere le entità distinte da una raccolta, ma voglio che il confronto sia sull'ID entità, anche se le altre proprietà sono diverse.Come si utilizza un confronto personalizzato con il metodo Distinct di Linq?
Secondo il libro, se ho un'entità Gribulator, dovrei essere in grado di creare un operatore di confronto come questo ...
private class GribulatorComparer : IComparer<Gribulator> {
public int Compare(Gribulator g1, Gribulator g2) {
return g1.ID.CompareTo(g2.ID);
}
}
... e poi usarlo come questo ...
List<Gribulator> distinctGribulators
= myGribulators.Distinct(new GribulatorComparer()).ToList();
Tuttavia, questo dà i seguenti errori del compilatore ...
'System.Collections.Generic.List' non contiene una definizione per 'distinto' e il miglior metodo di overload estensione 'System.Linq.Enumerable .Distinct (System.Collections.Generic.IEnumerable, System.Collections.Generic.IEqualityComparer) 'ha alcuni argomenti non validi
Argomento 2: non è possibile convertire da 'LinqPlayground.Program.GribulatorComparer' a' System.Collections.Generic.IEqualityComparer '
Ho cercato un po' e ho visto un sacco di esempi che usano un codice come questo, ma non ho lamentele sugli errori del compilatore.
Cosa sto sbagliando? Inoltre, è questo il modo migliore per farlo? Voglio una soluzione una tantum qui, quindi non voglio iniziare a cambiare il codice per l'entità stessa. Voglio che l'entità rimanga normale, ma solo in questo posto, confronta solo per ID.
Grazie per qualsiasi aiuto.
dimenticato di aggiungere, sto usando VS2012, e così NET 4.0 in C# –