一尘不染

在列表中选择两个属性不同

c#

我有一个list<message>包含type
GuidDateTime(以及其他属性)的属性。我想删除该列表中GuidDateTime相同的所有项目(一个除外)。有时这两个属性将与列表中的其他项目相同,但其他属性将有所不同,所以我不能只使用.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++
    }
}

阅读 326

收藏
2020-05-19

共1个答案

一尘不染

LINQ to
Objects不能以内置方式轻松提供此功能,但是MoreLINQ有一个方便的DistinctBy方法:

messages = messages.DistinctBy(m => new { m.id, m.date }).ToList();
2020-05-19