【问题标题】:C# Sorting Directory Names using LINQC# 使用 LINQ 对目录名称进行排序
【发布时间】:2013-06-21 15:42:57
【问题描述】:

我发现了类似 here 的东西,但一直无法正常工作。我对 LINQ 很陌生,所以不完全确定它发生了什么。任何帮助,将不胜感激。我的目录名称如下:

directory-1
article-about-something-else

我想按名称对它们进行排序,但到目前为止还不能。它们位于 RedHat 服务器上的网络驱动器上。目录列表以看似随机的顺序出现乱码。

以下是我尝试过的一些方法:

DirectoryInfo dirInfo = new DirectoryInfo("Z:\\2013");
var dirs = dirInfo.GetDirectories().OrderBy(d => dirInfo.Name);
foreach (DirectoryInfo dir in dirs)
{
    string month = dir.Name;
    Console.WriteLine(dir.Name);
    var monthDirInfo = new DirectoryInfo("Z:\\2013\\" + month);
    var monthDirs = monthDirInfo.GetDirectories().OrderBy(d => monthDirInfo.CreationTime);
    foreach (DirectoryInfo monthDir in monthDirs)
    {
        string article = monthDir.Name;
        Console.WriteLine(monthDir.Name);
        sb.AppendLine("<li><a href=\"/2013/" + month + "/" + article + "\">" + TextMethods.GetTitleByUrl("2013/" + month + "/" + article) + "</a></li>");
    }
}

任何帮助将不胜感激。我现在有点不知所措。我确定我也遗漏了一些明显的东西。

【问题讨论】:

  • 我会试一试,但是当我使用f =&gt; f.Name时也没有成功
  • 两件事...monthDirInfo 应该与dir 完全相同,那么为什么要创建一个新对象呢? Sayse 也是正确的,您需要使用 d => d.Name。
  • 我知道我遗漏了一些明显的东西。多谢你们! :)

标签: c# linq .net-4.0


【解决方案1】:

您按根文件夹的名称而不是每个子目录的名称进行排序。

所以改变...

var dirs = dirInfo.GetDirectories().OrderBy(d => dirInfo.Name);

到...

var dirs = dirInfo.EnumerateDirectories().OrderBy(d => d.Name);

var monthDirs = monthDirInfo.GetDirectories()
    .OrderBy(d => monthDirInfo.CreationTime);

到...

var monthDirs = monthDirInfo.EnumerateDirectories()
    .OrderBy(d => d.CreationTime);

我使用了EnumerateDirectories,因为它更有效。 GetDirectories 会在开始排序之前先收集所有目录。

【讨论】:

  • Erm.. 那肯定是 d.name 或 n => n.Name?
【解决方案2】:
dirInfo.GetDirectories().OrderBy(d => d.Name);

【讨论】:

    【解决方案3】:
    var dirs = dirInfo.GetDirectories().OrderBy(d => d.Name);
    

    LINQ 是关于动态创建“函数”...所以您在这里创建一个函数,该函数接受一个名为“d”的变量,表示当前记录并返回 d.Name 以进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2020-07-30
      • 2011-07-04
      • 2014-01-14
      • 1970-01-01
      • 2018-07-26
      • 2015-04-15
      相关资源
      最近更新 更多