4

我在这里发现了类似的东西,但一直无法正常工作。我对 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>");
    }
}

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

4

3 回答 3

5

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

所以换...

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将首先收集所有目录,然后再开始对其进行排序。

于 2013-06-21T15:47:02.803 回答
3
dirInfo.GetDirectories().OrderBy(d => d.Name);
于 2013-06-21T15:45:56.457 回答
2
var dirs = dirInfo.GetDirectories().OrderBy(d => d.Name);

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

于 2013-06-21T15:46:42.933 回答