首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个列表并删除list2中找不到的项

比较两个列表并删除list2中找不到的项
EN

Stack Overflow用户
提问于 2019-10-19 02:46:32
回答 1查看 1K关注 0票数 0

我有两份名单-

代码语言:javascript
运行
复制
List<String> List1;
List<File> List2;

内容如下-

代码语言:javascript
运行
复制
List1                   List2
-----                   -----
String                  ID    FileName     LastWrite

tttaaaajk34j34          1       aaa        01-02-2019
oooccc                  2       bbb        14-09-2018
ddd                     3       ccc        23-06-2019
ttt                     4       ddd        15-10-2016
aaa2832kajj             5       eee        20-08-2012

我希望将List1与List2进行比较,并从List2中删除在List1中找到的项。

结果-

代码语言:javascript
运行
复制
List2
----
ID     FileName

2       bbb
4       ddd
5       eee

我的代码-

代码语言:javascript
运行
复制
List1.Where(f => !List1.Any(str => str.FileName.Contains(List2)))

问题-

这不管用。它抛到异常下面,因为List2是一个列表,而List1是List。

代码语言:javascript
运行
复制
'String does not contain a definition for filename and no extension method filename accepting a first argument of type string..
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-19 03:03:07

您可以使用LINQ过滤掉这些文件:

代码语言:javascript
运行
复制
List1.Where(f => !List2.Any(str => str.Contains(f.FileName)))

解释:

  • 首先使用Enumerable.Where()筛选出要保留的List1文件。
  • 使用String.Contains()检查List2文件的Enumerable.Any()是否有子字符串文件名FileName来自List1。在本例中,我们确保在谓词中使用!操作符,以确保不保存在List2中找到的文件。

更新

根据问题中更新的需求,只需切换List1List2即可。您的新查询应该是:

代码语言:javascript
运行
复制
List2.Where(f => !List1.Any(str => str.Contains(f.FileName)))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58460105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档