我有两个数组,我想查找Array0中的所有元素,其中Array1的完整字符串包含在Array0的字符串中。这里是场景:基于字符串比较的数组交集基于字符串比较
我有一个字符串数组,其中包含特定目录中所有xml文件的完整路径。然后我得到一个位置列表,并且只想返回XML文件路径的子集,其中xml文件的文件名是loc ID。
所以,我的阵列0具有类似:
c:\some\directory\6011044.xml
c:\some\directory\6028393.xml
c:\some\directory\6039938.xml
c:\some\directory\6028833.xml
我的数组1具有:
6011044
6028833
...我只希望有从阵列0的结果,其中的文件路径字符串包含字符串来自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 请参阅Mark的评论如下。我的问题的答案是我。我有一个记录在我的locs集合中,CDS值为零,因此匹配了我的xml集合中的所有记录。如果我能找到一种自己编码的方式,那么我就是最完美的开发者!
我觉得你是对的,但我不能让它为我工作。帮助我更多;) –
最佳猜测:你的l.CdsCode.ToString()之一是空字符串。这将匹配所有文件。 –
GENIUS!我在我的locs集合中有一个记录为零。而且,我所有的CDS代码都包含一个零,所以他们都回来了。很棒的猜测! –