Ottenere un elenco di valori distinti in List

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.

Soluzione
Notes.Select(x => x.Author).Distinct();

Questo restituirà una sequenza (IEnumerable) di valori Author -- uno per valore unico.

Commentari (4)

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 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();
Commentari (2)
mcilist = (from mci in mcilist select mci).Distinct().ToList();
Commentari (2)