Obtenga una lista de valores distintos en List

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

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

Y tengo una lista de tipo Nota:

 List Notes = new List(); 

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

Podría repetir la lista y agregar todos los valores que no son duplicados a otra lista de cadenas, pero esto parece sucio e ineficiente. Tengo la sensación de que hay una construcción mágica de Linq que hará esto en una línea, pero no he podido encontrar nada.

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

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

 var DistinctItems = employees.GroupBy(x => x.EmpID).Select(y => y.First()); foreach(var item in DistinctItems) { //Add to other List } 

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

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

Actualización: después de volver a leer su pregunta, Kirk tiene la respuesta correcta si solo busca un conjunto distinto de Autores.

Muestra adicional, varios campos en DistinctBy:

 res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList(); 
  public class KeyNote { public long KeyNoteId { get; set; } public long CourseId { get; set; } public string CourseName { get; set; } public string Note { get; set; } public DateTime CreatedDate { get; set; } } public List KeyNotes { get; set; } public List GetCourses { get; set; } List courses = KeyNotes.Select(x => new RefCourse { CourseId = x.CourseId, Name = x.CourseName }).Distinct().ToList(); 

Al usar la lógica anterior, podemos cursos únicos.

 mcilist = (from mci in mcilist select mci).Distinct().ToList();