【问题标题】:Linq Query Check with List (of string)Linq 查询检查与列表(字符串)
【发布时间】:2018-01-29 16:44:46
【问题描述】:

如何从 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

返回值什么都没有。

【问题讨论】:

  • 如果你加入你的扩展名列表等于 xf 应该可以解决问题。
  • 您确定要使用_extnsn.All吗?对我来说,听起来你的意思是_extnsn.Any
  • 感谢 antdc 和 Micha Wiedenmann ...任何工作都很好

标签: vb.net linq


【解决方案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),则不必获取所有 FileInfo。只是优化

【讨论】:

  • ooh datz 太棒了......我现在更改了我的代码“_dirInfo.EnumerateFiles”所以我们会比 getfiles 方法更快,我是正确的!!!!
【解决方案2】:

您确定要使用 _extnsn.All 吗?对我来说,听起来你的意思是 _extnsn.Any。 ——米莎·维登曼

我刚刚将_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 等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2016-01-27
    • 1970-01-01
    • 2021-01-15
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多