Выделить по двум свойствам в списке

у меня естьlist<message> который содержит свойства типаGuid а такжеDateTime (а также другие свойства). Я хотел бы избавиться от всех пунктов в этом списке, гдеGuid а такжеDateTime одинаковы (кроме одного). Будут времена, когда эти два свойства будут такими же, как и у других элементов в списке, но другие свойства будут отличаться, поэтому я не могу просто использовать.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? ); 

Это то, что у меня есть сейчас, но кажется, что должен быть лучший способ

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++
    }
}

Ответы на вопрос(5)

Ваш ответ на вопрос