我有两个列表:
newUpdates
和updatesToAdd
我首先需要按Id从newUpdates
列表中删除所有出现的updatesToAdd
。然后我需要将所有的updatesToAdd
重新添加到newUpdates
中以防止重复。
可能不清楚我为什么要这样做,但是我需要换出多次出现的共享相同Id的项(不同的更新类型),然后使用main/master/catch all更新类型重新插入该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();
然而,我仍然在我的列表中得到了重复的结果。
发布于 2018-11-23 01:24:34
为什么不使用Except呢?https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.except?view=netframework-4.7.2
或Contains为假。
事实上,我认为你有一个bug。我认为你想这么做:
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);
https://stackoverflow.com/questions/53435683
复制相似问题