In C#, diciamo che ho una classe chiamata Note con tre variabili membro String.
public class Note
{
public string Title;
public string Author;
public string Text;
}
E ho una lista di tipo Nota:
List<Note> Notes = new List<Note>();
Quale sarebbe il modo più pulito per ottenere un elenco di tutti i valori distinti nella colonna Autore?
Potrei iterare attraverso la lista e aggiungere tutti i valori che non sono duplicati ad un'altra lista di stringhe, ma questo sembra sporco e inefficiente. Ho la sensazione che ci sia qualche costruzione magica di Linq che lo faccia in una riga, ma non sono stato in grado di trovare nulla.
Jon Skeet ha scritto una libreria chiamata morelinq che ha un operatore DistinctBy()
. Vedi here per l'implementazione. Il vostro codice sarebbe simile a
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Aggiornamento: Dopo aver riletto la tua domanda, Kirk ha la risposta corretta se stai solo cercando un insieme distinto di Autori.
Aggiunto esempio, diversi campi in DistinctBy:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();