【发布时间】:2019-01-16 00:33:22
【问题描述】:
假设我有一个字符串列表。这些字符串将成为我要打开的目录名称的一部分。
var listOfStrings = new List<string>(){"Foo", "Bar", "LocalHost", "SomeIPAddress"};
如果这是我的列表,我的目录可能如下所示:
- Foo_TodaysDate_ThisFileNameIsMostlyLongAndUnhelpful
- Bar_TodaysDate_ThisFileNameIsMostlyLongAndUnhelpful
- LocalHost_TodaysDate_ThisFileNameIsMostlyLongAndUnhelpful
- SomeIPAddress_TodaysDate_ThisFileNameIsMostlyLongAndUnhelpful
所以我这里有将目录信息加载到列表中的代码:
m_jsonDirectories = new DirectoryInfo(@"C:\ProgramData\SCLDDB\ReportLogs\")
.GetDirectories()
.OrderByDescending(p_f => p_f.LastWriteTime)
.ToList();
现在,我可以将主目录中的所有目录加载到我的变量中,但我想添加如下内容:
.Where(x => x.Name.Contains(/*A string found in my List above*/)
编辑:在上面的语句中,参数 x 的类型是 DirectoryInfo。所以 x.Name 应该返回目录的名称。
我不知道怎么搜索
List.Any(s => string.Contains(s))
当我没有设置字符串变量时。理想情况下,我只想在列表中的每个元素中搜索匹配项,而不需要单独设置一些临时字符串变量。
【问题讨论】:
-
.Where(x => listOfStrings.Any(s => x.Name.Contains(s))); -
这不起作用,因为参数s是类型目录信息。
-
不,不是。
s的类型为string。 -
如果你真的有
var listOfStrings = new List<string>(){"Foo", "Bar", "LocalHost", "SomeIPAddress"};就像你在问题中显示的那样,那是不可能的。 -
应该是
m_jsonDirectories.Where(x => listOfStrings.Any(s => x.Name.Contains(s)))
标签: c# string list linq directory