首页 > 解决方案 > 以高效的方式过滤 2 个列表

问题描述

我有 2 个列表:

newUpdatesupdatesToAdd

我首先需要通过他们的 IDupdatesToAdd从列表中删除所有出现的 。newUpdates然后我需要将所有内容添加updatesToAddnewUpdates以防止重复。

可能不清楚我为什么要这样做,但我需要换出多次出现的具有相同 ID(不同更新类型)的项目,然后为该 Id 重新插入一个项目,其中包含主/主/捕获所有更新类型。

到目前为止,我的代码就是这样做的,但运行速度非常慢。有没有更高效的方法来写这个?

    var newUpdates = new List<Entity>();
    var updatesToAdd = new List<Entity>();

    var Ids = updatesToAdd.Select(x => x.Id).ToList();
    newUpdates.RemoveAll(x => Ids.Contains(x.Id));
    newUpdates.AddRange(updatesToAdd);

我试着做:

    newUpdates.Union(updatesToAdd).ToList();

但是,我的列表中仍然存在重复项。

标签: c#linq

解决方案


为什么不使用 except 呢? https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.except?view=netframework-4.7.2

或包含为假。

事实上,我认为你有一个错误。我想你想这样做:

var newUpdates = new List<Entity>(); //overall list to add
var updatesToAdd = new List<Entity>();  //later list to add

var Ids = updatesToAdd.Select(x => x.Id).ToList();  //this line chagned
newUpdates.RemoveAll(x => Ids.Contains(x.Id));
newUpdates.AddRange(updatesToAdd);

推荐阅读