使用Linq方法语法从列表中删除背对背复制条目

时间:2016-09-28 19:42:09

标签: c# linq

我有一个状态更改列表,其中可能包含重复的条目,我需要过滤掉删除重复发生的重复项。

希望一些示例列表能够演示我想用linq方法语法实现的内容。

{
    "to": "/topics/mytopic",
    "priority": "high",
    "data": {
        "sound": "default",
        "badge": "1",
        "body": "the body text",
        "title": "title text"
    }
}

我考虑过将GroupBy与Date,OldStatus和NewStatus一起使用,但我担心日期会在几秒钟内发生变化,而我仍然希望排除背后相同的情况。 (OldStatus / NewStatus)条目。

使用linq方法语法删除这些背对背条目的资格解决方案是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用Aggregate:如果当前项目不等于最后添加的项目,则将项目添加到累积列表:

var result = list.Aggregate(new List<StatusChange>(),
    (lst, i) =>
    {
        var last = lst.LastOrDefault();
        if (last == null
                || (last.Id != i.Id 
                    && last.OldStatus != i.OldStatus
                    && last.NewStatus != i.NewStatus))
        {
            lst.Add(i);
        }
        return lst;
    });

答案 1 :(得分:-1)

在此解决方案中,您成对迭代并检查对。如果一对中的两个项目具有相同的boolOldStatus,则将它们添加到重复项集合中。迭代完成后,将从NewStatus集合中删除重复项:

statuses