簡體   English   中英

C#使用LINQ對目錄名稱進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM