Voglio ottenere i valori distinti in una lista, ma non dal confronto standard di uguaglianza.Perché non esiste un metodo Linq per restituire valori distinti da un predicato?
Quello che voglio fare è qualcosa di simile:
return myList.Distinct((x, y) => x.Url == y.Url);
Non posso, non c'è nessun metodo di estensione in LINQ che farà questo - solo uno che prende un IEqualityComparer
.
posso hack in giro con questo:
return myList.GroupBy(x => x.Url).Select(g => g.First());
ma che sembra disordinato. Inoltre non fa esattamente la stessa cosa - posso solo usarlo qui perché ho una sola chiave.
Potrei anche aggiungere la mia:
public static IEnumerable<T> Distinct<T>(
this IEnumerable<T> input, Func<T,T,bool> compare)
{
//write my own here
}
Ma questo sembra un po 'come scrivere qualcosa che dovrebbe essere lì, in primo luogo.
Qualcuno sa perché questo metodo non è presente?
mi sto perdendo qualcosa?
Grazie per la rapida risposta - Potrei usarlo! Qualche idea sul perché hanno saltato tutti questi ... Con (Predicato) metodi? – Keith
Non proprio, temo. Inserirò un blog sul progetto MoreLinq quando avrò un insieme significativo di funzionalità ... fondamentalmente sarà un progetto open source con estensioni a LINQ to Objects, e probabilmente anche Push LINQ. –
Se dovessi indovinare, indovinerei per parità con le opzioni IQueryable e cosa è realistico (senza ammalarmi) in TSQL. Quindi DISTINCT (table.column) va bene, ma avresti bisogno di una chiave maneggevole e di un TSQL più complesso per DistinctBy ... –