1

我列出一个目录的文件,并按文件扩展名对其进行排序:

Dim Files As List(Of IO.FileInfo) = Get_Files(Directory, True, ValidExtensions).OrderBy(Function(x) x.Extension).ToList

如何在同一指令中添加另一个参数以按名称内容对其进行排序,如下所示?:

x.Name.ToLower.Contains("word")

我试图用逗号分隔它(是的,太愚蠢了):

Dim Files As List(Of IO.FileInfo) = Get_Files(Directory, True, ValidExtensions).OrderBy(Function(x) x.Extension, x.Name.ToLower.Contains("word")).ToList
UPDATE

我尝试使用 @pswg 解决方案,但没有返回所需的结果。

但是,如果我分别列出两个列表,我会在第二个列表中得到所需的排序:

 Dim Files As List(Of IO.FileInfo) = _
Get_Files(Directory, True, ValidExtensions).OrderBy(Function(x) x.Extension).ToList

Dim Files2 As List(Of IO.FileInfo) = _
Files.OrderBy(Function(x) x.Name.ToLower.Contains("word")).ToList

但我只想在第一个列表中改进它。

4

1 回答 1

1

使用ThenBy方法:

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

更新以将名称中不包含"word"的所有项目排在第一位,请使用以下命令:

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

当然,如有必要,您可以随时交换和OrderBy使用以反转单个排序键的顺序。OrderByDescendingThenByThenByDescending

于 2013-08-09T18:39:33.567 回答