我看到这个问题很常见,但没有一个答案按预期工作。我有一个对象列表,当他们的Id在指定列表中时,我需要删除其中的一些对象。我尝试了List.RemoveAll,但只返回一个整数,而不是修改后的列表。如何取回列表,减去已删除的项目?
List<Target> allServers = GetTargets(Group.Id);
List<long> excludedServers = GetExcludedServers();
List<Target> patchServers = allServers
.RemoveAll(x => !excludedServers.Any(y => y.Id == x.Id));
答案 0 :(得分:5)
RemoveAll修改现有的List,它会返回删除的项目数。要获得没有可以使用的项目的新列表
var newList = myList.Where(i => !excludedItems.Any(ei => ei.Id == i.Id)).ToList();
虽然如果你的Server
类有正确的平等成员来比较ID,你可以写一下
var newList = myList.Except(servers).ToList();
答案 1 :(得分:1)
试试这个
List<Target> allServers = GetTargets(Group.Id);
List<long> excludedServers = GetExcludedServers();
List<Target> patchServers = allServers
.Where(x => !excludedServers.Any(y => y.Id == x.Id)).ToList();
答案 2 :(得分:1)
你可以做这样的事情
patchServers = allServers.Where(x => !excludedServers.Contains(x.id)).ToList();