这个问题与这个问题非常相似: Use LINQ to get items in a List<>, that are not in another List<>。但是这些差异足以让我无法确定 LINQ 语法。我有两个清单:List<Fubar> fewBarNewList<string> existingProviderIDs哪里Fubar看起来像:Class Fubar{ int FunbarId int {get; set;} .... .... string ProviderID {get; set;}}现在,我想从内部存在的fewBarNew任何实例中删除.FewBarNew.ProviderIDexistingProviderIDs fewBarNew = fewBarNew.Where(f => !existingProviderIdList.Any(ep => ?????).ToList();
1 回答
MM们
TA贡献1886条经验 获得超2个赞
Any 使您能够检查集合中的任何项目是否与某个谓词匹配。因此,您可以将谓词定义为“如果任何项目与当前项目匹配”:
fewBarNew.Where(f => !existingProviderIdList.Any(ep => ep == f.ProviderID));
但是,我认为更清洁的方法是使用.Contains
:
var result = fewBarNew.Where(f => !existingProviderIDs.Contains(f.ProviderID));
然后,当它执行时,O(n^2)
您可以改用 aHashSet<string>
来改进:
var existingProviderIDSet = new HashSet<string>(existingProviderIDs); var result = fewBarNew.Where(f => !existingProviderIDSet.Contains(f.ProviderID));
当HashSet
'Contains
执行一个O(1)
操作时,这将在 中执行O(n)
。
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消