Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Select distinct by two properties in a list

I have a list<message> that contains properties of type Guid and DateTime (as well as other properties). I would like to get rid of all of the items in that list where the Guid and DateTime are the same (except one). There will be times when those two properties will be the same as other items in the list, but the other properties will be different, so I can't just use .Distinct()

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? );  

This is what I have right now, but it seems like there ought to be a better way

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++     } } 
like image 219
user1304444 Avatar asked Aug 04 '12 18:08

user1304444


1 Answers

LINQ to Objects doesn't provide this functionality easily in a built-in way, but MoreLINQ has a handy DistinctBy method:

messages = messages.DistinctBy(m => new { m.id, m.date }).ToList(); 
like image 159
Jon Skeet Avatar answered Oct 03 '22 00:10

Jon Skeet