distinct object list c#



Obtenir une liste de valeurs distinctes dans la liste (4)

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

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

Et j'ai une liste de type Note:

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

Quel serait le moyen le plus propre d'obtenir une liste de toutes les valeurs distinctes dans la colonne Auteur?

Je pourrais parcourir la liste et ajouter 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 va le faire en une ligne, mais je n'ai pas réussi à trouver quoi que ce soit.


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

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

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

Exemple ajouté, 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 string CourseName { get; set; }
        public string Note { get; set; }
        public DateTime CreatedDate { get; set; }
    }

public List<KeyNote> KeyNotes { get; set; }
public List<RefCourse> GetCourses { get; set; }


List<RefCourse> courses = KeyNotes.Select(x => new RefCourse { CourseId = x.CourseId, Name = x.CourseName }).Distinct().ToList();

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


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

var DistinctItems = employees.GroupBy(x => x.EmpID).Select(y => y.First());

foreach(var item in DistinctItems)
{
    //Add to other List
}




distinct