I C#, la oss si at jeg har en klasse som heter Note med tre String-medlemsvariabler.
public class Note
{
public string Title;
public string Author;
public string Text;
}
Og jeg har en liste av typen Notat:
List<Note> Notes = new List<Note>();
Hva ville være den reneste måten å få en liste over alle forskjellige verdier i Author-kolonnen?
Jeg kunne iterere gjennom listen og legge til alle verdier som ikke er duplikater til en annen liste med strenger, men dette virker skittent og ineffektivt. Jeg har en følelse av at det er noen magiske Linq konstruksjon som vil gjøre dette i en linje, men jeg har ikke vært i stand til å komme opp med noe.
Jon Skeet har skrevet et bibliotek kalt morelinq som har en DistinctBy()
-operator. Se her for implementeringen. Koden din vil se slik ut
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
Oppdatering: Etter å ha lest spørsmålet ditt på nytt, har Kirk det riktige svaret hvis du bare leter etter et bestemt sett med forfattere.
Lagt til eksempel, flere felt i DistinctBy:
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
mcilist = (from mci in mcilist select mci).Distinct().ToList();