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>");
}
}
如有任何帮助,我们将不胜感激。我现在有点不知所措。我肯定我也错过了一些显而易见的东西。
您按根文件夹的名称排序,而不是按每个子目录的名称排序。
所以改变。。。
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.要排序的名称。