linq - 基于字符串比较的数组交集

标签 linq arrays

我有两个数组,我想在其中查找 Array0 中的所有元素,其中 Array1 的完整字符串包含在 Array0 的字符串中。这是场景:

我有一个字符串数组,其中包含某个目录中所有 xml 文件的完整路径。然后,我获取位置列表,并且只想返回 xml 文件路径的子集,其中 xml 文件的文件名是 loc id。

所以,我的 Array0 具有如下内容:

c:\some\directory\6011044.xml
c:\some\directory\6028393.xml
c:\some\directory\6039938.xml
c:\some\directory\6028833.xml

我的 Array1 有:

6011044
6028833

...我只想获得 Array0 的结果,其中文件路径字符串包含 Array1 中的字符串。

这是我所拥有的...

 filesToLoad = (from f in Directory.GetFiles(Server.MapPath("App_Data"), "*.xml")
   where f.Contains(from l in locs select l.CdsCode.ToString()) 
   select f).ToArray();

...但是我收到以下编译器错误...

Argument '1': cannot convert from 'System.Collections.Generic.IEnumerable<string>' to 'string'

...我从英语的角度可以理解,但不知道如何解决。

我是不是从错误的角度来的?

我只缺少一件吗?

编辑

这是我将其更改为:

filesToLoad = (Directory.GetFiles(Server.MapPath("App_Data"), "*.xml"))
     .Where(path => locs.Any(l => path.Contains(l.CdsCode.ToString()))
 ).ToArray();

...但这仍然让我获得所有 .xml 文件,即使其中之一不在我的 locs 实体集合中。我把什么东西放错地方了?

显然我错过了主要概念,所以也许对每个部分的作用进行一些解释也会有所帮助?

编辑2 请参阅下面马克的评论。我的问题的答案就是我。我的 locs 集合中有一条记录,其 CDS 值为零,因此与 xml 集合中的所有记录相匹配。如果我能找到一种无需自己编码的方法,那么我就会成为完美的开发人员!

最佳答案

您缺少任何:

string[] result = paths.Where(x => tests.Any(y => x.Contains(y))).ToArray();

关于linq - 基于字符串比较的数组交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2359851/

相关文章:

javascript - 尝试将对象添加到 Javascript 对象数组时出现“意外标记 d”

c# - 如何使用linq删除重复记录?

c# - 将 Linq 查询返回到 KeyValuePair 的列表中

c# - 使用 StackExchange.Redis 在 Azure Redis 缓存中存储自定义 .Net 对象

C 中的编译器错误 C2440

Php - 如何在数组中存储 3 个元素的元组?

c# - Linq 查询返回具有特定属性值的嵌套数组

c# - 如何在 SQL 查询中包含数组的所有元素?

c++ - 数组和指针 C++

javascript - 如何从 React Native 中的两个数组中提取不相同的元素?