以高效的方式过滤2个列表

时间:2018-11-22 17:13:52

标签: c# linq

我有2个列表:

newUpdatesupdatesToAdd

首先,我需要根据其ID从updatesToAdd列表中删除所有newUpdates的出现。然后,我需要将所有updatesToAdd重新添加到newUpdates中,以防止重复。

目前尚不清楚为什么要这样做,但是我需要换掉多次出现共享相同ID(不同更新类型)的项目,然后使用main / master /重新插入该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();

但是,我仍然在列表中出现重复项。

1 个答案:

答案 0 :(得分:1)

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

或Contains为假。

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

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);