更正此LINQ指令语法

时间:2013-08-09 18:37:04

标签: .net vb.net linq list

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

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

我尝试使用@ p.s.w.g解决方案但未返回所需的结果。

但如果我分开制作两个列表,我会在第二个列表中得到所需的排序:

 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

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

1 个答案:

答案 0 :(得分: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

当然,您可以随时将OrderByOrderByDescendingThenByThenByDescending交换,以便在必要时更改单个排序键的顺序。