C#使用LINQ对目录名进行排序

本文关键字:排序 使用 LINQ | 更新日期: 2023-09-27 18:19:36

我在这里找到了类似的东西,但一直无法使其工作。我是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>");
    }
}

如有任何帮助,我们将不胜感激。我现在有点不知所措。我肯定我也错过了一些显而易见的东西。

C#使用LINQ对目录名进行排序

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

所以改变。。。

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

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

LINQ是关于动态创建"函数"。。。因此,您在这里创建了一个函数,该函数接受一个名为"d"的变量,该变量表示当前记录,并返回d.要排序的名称。