我有 2 个不同对象的列表(foo
& bar
)共享相同属性的我们称之为id
.
public List<foo> foo { get; set; }
public List<bar> bar { get; set; }
我想从中删除所有对象foo
其 id 不存在于bar
在 linq 中如何做到这一点?我一直在看Intersect
, RemoveAll
& Join
但找不到任何列表属于不同类型的示例。
尝试这个:
foo.RemoveAll(x=> !bar.Any(y=>y.Id==x.Id));
!bar.Any(y=>y.Id==x.Id)
如果项目在,将会得到bar
集合,如果不是,则会将其从中删除foo
收藏。
使用哈希集 O(n) 更好的解决方案:
var idsNotToBeRemoved = new HashSet<int>(bar.Select(item => item.Id));
foo.RemoveAll(item => !idsNotToBeRemoved.Contains(item.Id));
第二个答案来源:https://stackoverflow.com/a/4037674/1714342 https://stackoverflow.com/a/4037674/1714342
EDIT:
正如@Carra 所说,第一个解决方案适用于小列表,第二个解决方案对于大列表更有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)