【问题标题】:How can I get a list of DirectoryInfo where the name of the directories contains a string stored in a List<string>?如何获取 DirectoryInfo 列表,其中目录名称包含存储在 List<string> 中的字符串?
【发布时间】:2019-01-16 00:33:22
【问题描述】:

假设我有一个字符串列表。这些字符串将成为我要打开的目录名称的一部分。

var listOfStrings = new List<string>(){"Foo", "Bar", "LocalHost", "SomeIPAddress"};

如果这是我的列表,我的目录可能如下所示:

  • Foo_TodaysDate_ThisFileNameIsMostlyLongAndUnhelpful
  • Bar_TodaysDate_ThisFileNameIsMostlyLongAndUnhelpful
  • Lo​​calHost_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 =&gt; listOfStrings.Any(s =&gt; x.Name.Contains(s)));
  • 这不起作用,因为参数s是类型目录信息。
  • 不,不是。 s 的类型为 string
  • 如果你真的有 var listOfStrings = new List&lt;string&gt;(){"Foo", "Bar", "LocalHost", "SomeIPAddress"}; 就像你在问题中显示的那样,那是不可能的。
  • 应该是m_jsonDirectories.Where(x =&gt; listOfStrings.Any(s =&gt; x.Name.Contains(s)))

标签: c# string list linq directory


【解决方案1】:

.Where(x=&gt; listOfStrings.Any(c=&gt; x.Contains(c))) 就是你要找的东西。

【讨论】:

    【解决方案2】:

    所以你有一个DirectoryInfos 序列和一个strings 序列。

    您希望过滤DirectoryInfos 的序列,使得只有那些DirectoryInfosName 至少以您的字符串序列中的一个字符串开头。

    因此,如果您的字符串序列包含“Foo”,那么您的最终结果应该至少包含所有NameFoo 开头的DirectoryInfos

    IEnumerable<string> strings = ...
    IEnumerable<DirectoryInfo> directoryInfos = ...
    
    var result = directoryInfos
        .Where(directoryInfo => strings
               .Any(str => directoryInfo.Name.StartsWitch(str));
    

    言辞:

    从所有DirectoryInfo的序列中,只保留那些DirectoryInfo的名字以at开头的DirectoryInfo。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2013-11-14
      • 2012-12-16
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多