[英]C# Sorting Directory Names using LINQ
我在這里找到了類似的東西但是卻無法使它工作。 我對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.Name來排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.