Like运算符在Linq查询中不起作用

时间:2013-12-05 09:18:43

标签: vb.net linq

我有以下LINQ查询来过滤文件:

Dim arrayFiles As FileInfo()
Dim strFolder As String = "C:\Temp"
Dim strSearch As String = "[AFile].*"

Dim directoryInfo As DirectoryInfo = New IO.DirectoryInfo(Path:=strFolder)
arrayFiles = directoryInfo.GetFiles(searchPattern:=strSearch, 
                                    searchOption:=SearchOption.TopDirectoryOnly).
                 Where(Function(s) s.Name.ToUpper Like strSearch.ToUpper).
                 ToArray()

在此示例中,指定的文件夹包含1个文件:“[AFile] .PDF”。上面的示例返回0个文件(数组为空)。

如果我将搜索模式更改为“AFile.PDF”或“*。*”,那么我会获得包含1个文件的正确数组。

为什么搜索模式“AFile。*”在此示例中不起作用?

1 个答案:

答案 0 :(得分:1)

您正在为GetFiles提供搜索模式,因此无需使用其他Where

arrayFiles = (New IO.DirectoryInfo(Path:=strFolder)).GetFiles(searchPattern:=strSearch,
                                   searchOption:=SearchOption.TopDirectoryOnly).ToArray

您的代码无效,因为[]括号在VB.NET LIKE operator中具有特殊含义:

  

[ charlist ] - charlist中的任何单个字符

因此,您需要通过将它们括在括号中来转义这些特殊字符:

Dim strSearch As String = "[[]AFile[]].*"

注意:事实上,您只能转义[,因为]只有在与[配对时才有特殊含义。