Mam list<message>
, który zawiera właściwości typu Guid
i DateTime
(jak również inne właściwości). Chciałbym pozbyć się wszystkich pozycji z listy, gdzie Guid
i DateTime
są takie same (z wyjątkiem jednego). Nie będzie wtedy, gdy te dwie właściwości będą takie same jak innych elementów na liście, ale pozostałe właściwości będzie inna, więc nie można po prostu użyć .Distinct()
Wybierz wyróżniony przez dwie właściwości na liście
List<Message> messages = GetList();
//The list now contains many objects, it is ordered by the DateTime property
messages = from p in messages.Distinct( what goes here?);
To co mam teraz, ale wydaje się, że powinien być lepszy sposób
List<Message> messages = GetList();
for(int i = 0; i < messages.Count() - 1) //use Messages.Count() -1 because the last one has nothing after it to compare to
{
if(messages[i].id == messages[i+1}.id && messages[i].date == message[i+1].date)
{
messages.RemoveAt(i+1);
{
else
{
i++
}
}
http://stackoverflow.com/questions/489258/linq-distinct-on-a-particular-property – Shyju
dzięki. Nie wiem, dlaczego nie mogłem tego znaleźć, kiedy szukałem. – user1304444
Cieszę się, że odpowiedź Jona dla ciebie zadziałała. Tylko uwaga: twoja "obecnie używana metoda" nie kompiluje się i (po naprawieniu błędów kompilacji) nie będzie działać we wszystkich przypadkach - w zależności od kolejności twoich elementów, dostaniesz różne ** (źle) ** wyniki (w końcu porównujesz tylko sąsiadujące ze sobą elementy). – Adam