Στη C#, ας πούμε ότι έχω μια κλάση που ονομάζεται Note με τρεις μεταβλητές-μέλη String.
public class Note
{
public string Title;
public string Author;
public string Text;
}
Και έχω μια λίστα τύπου Note:
List<Note> Notes = new List<Note>();
Ποιος θα ήταν ο καθαρότερος τρόπος για να λάβω μια λίστα με όλες τις ξεχωριστές τιμές στη στήλη Συγγραφέας;
Θα μπορούσα να επαναλάβω τη λίστα και να προσθέσω όλες τις τιμές που δεν είναι διπλές σε μια άλλη λίστα συμβολοσειρών, αλλά αυτό φαίνεται βρώμικο και αναποτελεσματικό. Έχω την αίσθηση ότι υπάρχει κάποια μαγική κατασκευή Linq που θα το κάνει αυτό σε μια γραμμή, αλλά δεν μπόρεσα να βρω κάτι.
Ο Jon Skeet έχει γράψει μια βιβλιοθήκη που ονομάζεται morelinq η οποία έχει έναν τελεστή DistinctBy()
. Δείτε here για την υλοποίηση. Ο κώδικάς σας θα έμοιαζε ως εξής
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Ενημέρωση: Αφού ξαναδιάβασα την ερώτησή σας, ο Kirk έχει τη σωστή απάντηση αν ψάχνετε μόνο για ένα ξεχωριστό σύνολο Συγγραφέων.
Προστέθηκε δείγμα, διάφορα πεδία στο DistinctBy:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();