0

「Artist [Style] Number.ext」という名前のファイルを含むディレクトリがあります

例:

Atomix [Dubstep] 01.avi
Atomix [Rock] 02.wmv
Atomix [Rock] 03.avi

Lacuna [Rock] 01.mp4
Lacuna [Rock] 02.avi

LINQを使用してファイルを一覧表示し、アーティスト別にグループ化します。この順序で、「[style]」を 1 つだけ含めてから、各アーティストをファイル拡張子で並べ替えます。たとえば、「[ロック]" スタイル:

Atomix [Rock] 03.avi
Atomix [Rock] 02.wmv
Lacuna [Rock] 02.avi
Lacuna [Rock] 01.mp4

「A」は「L」よりも先に、「avi」は「wmv」よりも先に進みます。これは私の望ましい結果ですが、注文しようとすると次のような結果が得られます。

Atomix [Rock] 03.avi
Lacuna [Rock] 02.avi
Lacuna [Rock] 01.mp4
Atomix [Rock] 02.wmv

アーティストが混在しているのに拡張子がソートされていて、ソートすると「mp4」よりも「avi」が先に出てくるのですが、「Atomix」の「A」が「ラクーナ」の「L」より先に出てきてしまうのですが、これの直し方がわかりません。

これは、私が前に言ったファイル名で使用している命令です:

    Dim Videos As List(Of IO.FileInfo) = _
    Get_Files(Directory, True, ValidExtensions) _
    .OrderBy(Function(x) x.Extension) _
    .Where(Function(x) x.Name.ToLower.Contains("[rock]")) _
    .ToList

PS: メソッドの順序を入れ替えようとしましたが、同じ結果が得られました。

アップデート:

@jyparask ソリューションを使用しようとしましたが、拡張機能を注文するにはまだいくつかの変更が必要です。これが得られるものです。

Aa [Style] 04.mp4
Ab [Style] 01.wmv
Ab [Style] 03.wmv
Ab [Style] 05.mp4
Ab [Style] 05.wmv
Ab [Style] 06.mp4
Ab [Style] 07.mp4
Ab [Style] 09999999999964.mp4
Ac [Style] 166333226.mp4
Ac [Style] 333133333333313313322.mp4
Ac [Style] 44.mp4
Ac [Style] 6049.wmv

そして、これは私が使用しているコードです:

    Dim Videos As List(Of IO.FileInfo) = _
    Get_Files(Directory, True, ValidExtensions) _
    .Where(Function(x) x.Name.ToLower.Contains("[word]")) _
    .OrderBy(Function(x) x.Name) _
    .ThenBy(Function(x) x.Extension) _
    .ToList()
4

1 に答える 1

5

最初にアーティストの OrderBy を使用し、拡張子を渡す ThenBy を使用する必要があります。

Dim Videos As List(Of IO.FileInfo) = _
Get_Files(Directory, True, ValidExtensions) _
.OrderBy(Function(x) x.Name.Substring(0,x.Name.IndexOf("["))) _
.ThenBy(Function(x) x.Extension) _
.Where(Function(x) x.Name.ToLower.Contains("[rock]")) _
.ToList
于 2013-08-09T20:30:32.277 に答える