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

如何在Linq的Where子句中使用Substring筛选匹配StoreId的上传文件

解决方案

问题原因

你的两种写法都存在逻辑偏差:

  • 第一种使用Contains是全文件名模糊匹配,只要任意位置出现StoreId就会命中,自然会匹配到前缀包含StoreId的错误结果
  • 第二种使用Substring(0,13)是截取文件名的前13位(刚好对应12位前缀+下划线),而StoreId存在于下划线之后,在前13位中不可能匹配到,所以查询不到任何结果

正确实现

你只需要按下划线拆分文件名,取对应位置的内容和StoreId做精确匹配即可,同时可以加容错判断避免无下划线的异常文件名导致报错:

var uploadedFiles = Files.OrderByDescending(x => x.LastWriteTime)
    .Select(x => new
    {
        Name = x.Name,
        Date = Convert.ToDateTime(x.LastWriteTime).ToString("MM/dd/yyyy")
    })
    .Where(x => 
        // 先判断文件名包含下划线,避免拆分异常
        x.Name.Contains("_") 
        // 按下划线拆分后取最后一段,和StoreId完全匹配
        && x.Name.Split('_').Last() == StoreId.ToString())
    .ToList();

特殊场景适配

如果你的StoreId本身可能包含下划线,或者需要取下划线之后的全部内容(而非按下划线拆分的最后一段),可以修改拆分逻辑,只拆分一次取后半段即可:

.Where(x => 
    x.Name.Contains("_") 
    && x.Name.Split(new[] {'_'}, 2).Last() == StoreId.ToString())

内容的提问来源于stack exchange,提问作者1moreLearner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:02