我有2个列表:
newUpdates
和updatesToAdd
首先,我需要根据其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();
但是,我仍然在列表中出现重复项。
答案 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);