You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6中使用LINQ基于指定扩展名列表筛选SSH.NET SftpFile集合的技术咨询

解决方案:用LINQ筛选符合指定扩展名的SftpFile列表

我来帮你把循环逻辑转换成LINQ实现,同时保留List<SftpFile>类型的结果,而不是只提取文件名。

核心思路

我们需要直接在原始的sftpFiles集合上做过滤,同时满足两个核心条件:

  1. 排除掉RejectedFileName中定义的特殊文件名(.和..,这些是SFTP返回的目录条目)
  2. 文件名的扩展名必须在你指定的允许列表中(比如.csv、.txt)

完整代码示例

假设你已经定义了允许的扩展名列表,比如:

// 注意:扩展名要带点,和Path.GetExtension的返回格式保持一致
var allowedExtensions = new[] { ".csv", ".txt" };

然后用LINQ的Where方法完成筛选:

// 提前获取拒绝的文件名列表,避免重复调用方法创建数组,提升性能
var rejectedNames = RejectedFileName.GetNames();

// 筛选出符合条件的完整SftpFile对象
var filteredSftpFiles = sftpFiles
    .Where(file => 
        // 条件1:排除特殊目录条目
        !rejectedNames.Contains(file.Name) &&
        // 条件2:扩展名在允许列表中,支持忽略大小写匹配
        allowedExtensions.Contains(Path.GetExtension(file.Name), StringComparer.OrdinalIgnoreCase))
    .ToList();

代码细节解释

  • 直接操作原始集合:用Where替代先Select提取文件名的逻辑,这样就能保留完整的SftpFile对象,而不是只拿到文件名字符串
  • Path.GetExtension的作用:从文件名中提取带点的扩展名(比如"report.csv"会返回".csv"),确保和允许列表的格式完全匹配
  • 忽略大小写匹配:添加StringComparer.OrdinalIgnoreCase后,.CSV、.Txt这类大小写不同的扩展名也能被正确筛选
  • 缓存拒绝列表:提前把RejectedFileName.GetNames()的结果存起来,避免在循环中重复创建数组,优化性能

内容的提问来源于stack exchange,提问作者K.Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:37:40