Linq查询检查列表(字符串)

时间:2018-01-29 08:20:42

标签: vb.net linq

如何检查Linq查询中的字符串值列表?

_extnsn是一个包含值的字符串列表(.bmp,.jpg,.tga,...)。

我想用Linq查询获取这些类型的文件,所以我尝试了这样:

 dim _FileCOllections = From _file In _dirInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly)
    Where _extnsn.All(Function(xf) _file.Extension.ToLower = xf.ToLower)
    Order By _file.FullName Ascending
    Select _file

返回值无效。

2 个答案:

答案 0 :(得分:1)

显然,您有一个DirectoryInfo对象和一系列文件扩展名作为字符串。您希望查询仅保留目录中具有与其中一个文件扩展名匹配的扩展名的文件。

DirectoryInfo _dirInfo = ...
IEnumerable<string> fileExtensions = ...

IEnumerable<FileInfo> filesWithDesiredExtensions = _dirInfo.EnumerateFiles()
    .Where(fileInfo => fileExtensions.Contains(fileInfo.Extension));

<强>糟糕。我觉得你想在VB中使用它!对不起,也许这可能对C#读者有用了

顺便问一下,您是否看到我使用DirectoryInfo.EnumerateFiles而不是GetFiles?这样做的好处是,如果你只想要FirstOrDefault,或者Take(2),你就不必获取所有的FileInfos。只是一个优化

答案 1 :(得分:0)

  

您确定要使用_extnsn.All吗?对我来说,这听起来像你的意思_extnsn.Any。 - Micha Wiedenmann

我刚刚将_exntsn.All更改为_exntsn.Any

       Dim _exntsn As New List(Of String) From {".jpg", ".png", ".tga", ".tif"}
            _FileCOllections = From _file In _dirInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly)
                                                               Where _exntsn.Any(Function(k) k.ToLower = _file.Extension.ToLower)
                                                               Order By _file.FullName Ascending
                                                               Select _file

它对我来说很好,我可以获得这些特殊的扩展图像集......谢谢...... Micha Wiedenmann和所有人。