我有一个状态更改列表,其中可能包含重复的条目,我需要过滤掉删除重复发生的重复项。
希望一些示例列表能够演示我想用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方法语法删除这些背对背条目的资格解决方案是什么?
答案 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)
在此解决方案中,您成对迭代并检查对。如果一对中的两个项目具有相同的bool
和OldStatus
,则将它们添加到重复项集合中。迭代完成后,将从NewStatus
集合中删除重复项:
statuses