In C#, stel ik heb een klasse genaamd Note met drie String lidvariabelen.
public class Note
{
public string Title;
public string Author;
public string Text;
}
En ik heb een lijst van het type Notitie:
List<Note> Notes = new List<Note>();
Wat zou de schoonste manier zijn om een lijst te krijgen van alle verschillende waarden in de kolom Auteur?
Ik zou door de lijst kunnen itereren en alle waarden die'geen duplicaten zijn aan een andere lijst van strings toevoegen, maar dit lijkt vuil en inefficiënt. Ik heb het gevoel dat er een of andere magische Linq constructie is die dit in één regel zal doen, maar ik heb nog niets kunnen bedenken.
Jon Skeet heeft een bibliotheek geschreven genaamd morelinq die een DistinctBy()
operator heeft. Zie hier voor de implementatie. Je code zou er als volgt uitzien
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Update: Na het herlezen van je vraag, heeft Kirk het juiste antwoord als je'alleen op zoek bent naar een aparte set Auteurs.
Voorbeeld toegevoegd, verschillende velden in DistinctBy:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();