为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
函数式编程 2022-10-23 10:19:20
这个问题与这个问题非常相似: 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)


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信