使用 LINQ 删除 List<object> 中的项目,其中 List<string> 中存在属性

这个问题与这个问题非常相似: Use LINQ to get items in a List<>, that are not in another List<>。但是这些差异足以让我无法确定 LINQ 语法。


我有两个清单:


List<Fubar> fewBarNew

List<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();


函数式编程
浏览 97回答 1
1回答

MM们

Any 使您能够检查集合中的任何项目是否与某个谓词匹配。因此,您可以将谓词定义为“如果任何项目与当前项目匹配”:fewBarNew.Where(f&nbsp;=>&nbsp;!existingProviderIdList.Any(ep&nbsp;=>&nbsp;ep&nbsp;==&nbsp;f.ProviderID));但是,我认为更清洁的方法是使用.Contains:var&nbsp;result&nbsp;=&nbsp;fewBarNew.Where(f&nbsp;=>&nbsp;!existingProviderIDs.Contains(f.ProviderID));然后,当它执行时,O(n^2)您可以改用 aHashSet<string>来改进:var&nbsp;existingProviderIDSet&nbsp;=&nbsp;new&nbsp;HashSet<string>(existingProviderIDs); var&nbsp;result&nbsp;=&nbsp;fewBarNew.Where(f&nbsp;=>&nbsp;!existingProviderIDSet.Contains(f.ProviderID));当HashSet'Contains执行一个O(1)操作时,这将在 中执行O(n)。
打开App,查看更多内容
随时随地看视频慕课网APP