Remove items from list that intersect on property using Linq
我有两个不同对象列表(
1 2 | public List<foo> foo { get; set; } public List<bar> bar { get; set; } |
我想删除
如何在Linq中实现这一点?我一直在看
试试这个:
1 | foo.RemoveAll(x=> !bar.Any(y=>y.Id==x.Id)); |
如果想在
更好的解决方案hashset使用O(n):
1 2 | var idsNotToBeRemoved = new HashSet<int>(bar.Select(item => item.Id)); foo.RemoveAll(item => !idsNotToBeRemoved.Contains(item.Id)); |
源第二的答案:http://stackoverflow.com 1714342 4037674 / / /
编辑:
解决方案:为卡拉说,第一和第二个列表很小是更高效的大名单。
1 | var foo = foo.Where(f => !bar.Any(b => b.Id == f.Id)).ToList(); |
只是记住这是一个O(N2)的解决方案,它不会工作的很好大的列表。