In C#, sagen wir, ich habe eine Klasse namens Note mit drei String-Mitglied Variablen.
public class Note
{
public string Title;
public string Author;
public string Text;
}
Und ich habe eine Liste vom Typ Note:
List<Note> Notes = new List<Note>();
Wie bekomme ich am besten eine Liste aller eindeutigen Werte in der Spalte "Autor"?
Ich könnte durch die Liste iterieren und fügen Sie alle Werte, die nicht Duplikate zu einer anderen Liste von Zeichenfolgen sind, aber dies scheint schmutzig und ineffizient. Ich habe das Gefühl, dass es irgendeine magische Linq-Konstruktion gibt, die dies in einer Zeile erledigt, aber mir ist noch nichts eingefallen.
Jon Skeet hat eine Bibliothek namens morelinq geschrieben, die einen DistinctBy()
-Operator hat. Siehe hier für die Implementierung. Ihr Code würde wie folgt aussehen
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Aktualisierung: Nachdem ich Ihre Frage noch einmal gelesen habe, hat Kirk die richtige Antwort, wenn Sie nur nach einer bestimmten Gruppe von Autoren suchen.
Beispiel hinzugefügt, mehrere Felder in DistinctBy:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();