我有两个数组,我想在其中查找 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/