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 に答える