Obtenir une liste de valeurs distinctes dans List

En C #, disons que j’ai une classe appelée Note avec trois variables membres.

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

Et j’ai une liste de type Note:

 List Notes = new List(); 

Quelle serait la manière la plus propre d’obtenir une liste de toutes les valeurs distinctes dans la colonne Auteur?

Je pourrais parcourir la liste et append toutes les valeurs qui ne sont pas des doublons à une autre liste de chaînes, mais cela semble sale et inefficace. J’ai l’impression qu’il y a une construction magique de Linq qui le fera en une seule ligne, mais je n’ai rien pu faire.

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

Cela renverra une séquence ( IEnumerable ) de valeurs Author – une par valeur unique.

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

Jon Skeet a écrit une bibliothèque appelée morelinq qui possède un opérateur DistinctBy() . Voir ici pour la mise en œuvre. Votre code ressemblerait à

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

Mise à jour: Après avoir relu votre question, Kirk a la bonne réponse si vous cherchez simplement un ensemble d’auteurs distinct.

Ajout d’un exemple, plusieurs champs dans 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 ssortingng CourseName { get; set; } public ssortingng 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(); 

En utilisant la logique ci-dessus, nous pouvons suivre des cours uniques.

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