Obtener una lista de valores distintos en List

En C#, digamos que tengo una clase llamada Note con tres variables miembro String.

public class Note
{
    public string Title;
    public string Author;
    public string Text;
}

Y tengo una lista de tipo Nota:

List<Note> Notes = new List<Note>();

¿Cuál sería la forma más limpia de obtener una lista de todos los valores distintos en la columna Autor?

Podría iterar por la lista y añadir todos los valores que no sean duplicados a otra lista de cadenas, pero esto parece sucio e ineficiente. Tengo la sensación de que hay alguna construcción mágica de Linq que hace esto en una línea, pero no he sido capaz de encontrar nada.

Solución
Notes.Select(x => x.Author).Distinct();

Esto devolverá una secuencia (IEnumerable) de valores de Author -- uno por valor único.

Comentarios (4)

Jon Skeet ha escrito una biblioteca llamada morelinq que tiene un operador DistinctBy(). Vea aquí para la implementación. Su código sería como

IEnumerable distinctNotes = Notes.DistinctBy(note => note.Author);

Actualización: Después de releer tu pregunta, Kirk tiene la respuesta correcta si sólo buscas un conjunto distinto de Autores.

Añadido el ejemplo, varios campos en DistinctBy:

res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
Comentarios (2)
mcilist = (from mci in mcilist select mci).Distinct().ToList();
Comentarios (2)