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

LINQ中.Contains()条件未按预期生效的问题解决求助

解决LINQ字符串部分匹配无结果的问题

问题根源

你之前的LINQ查询逻辑方向搞反了:你用fdp.Type.Contains(搜索值),但实际场景是搜索值(或其片段)包含Type字段的内容(比如搜索值里的MLE12WBC7W1包含E12WBC7W1),所以无论去空格还是忽略大小写,都无法匹配到目标数据。

解决方案

以下几种实现方式可以满足需求:

1. 移除空格后检查包含关系

先将搜索值的空格全部移除,再判断处理后的搜索值是否包含Type字段内容(同时忽略大小写避免大小写差异问题):

// 预处理搜索值:移除空格并转小写
var processedSearches = searchValues.Select(s => s.Replace(" ", "").ToLower()).ToList();

// 过滤匹配项
var matchedItems = fdpList.Where(fdp => 
    processedSearches.Any(s => s.Contains(fdp.Type.ToLower()))
).ToList();

2. 拆分搜索值片段后匹配

如果搜索值的空格是分隔不同关键词的标志,可以拆分后逐个片段检查是否包含Type:

var matchedItems = fdpList.Where(fdp => 
    searchValues.Any(sv => 
        sv.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)
          .Any(part => part.Contains(fdp.Type))
    )
).ToList();

这种方式不需要移除所有空格,适合搜索值是多关键词组合的场景。

3. 正则表达式精准匹配

如果需要更灵活的匹配(比如支持忽略大小写、特殊字符转义),可以用正则表达式:

using System.Text.RegularExpressions;

var matchedItems = fdpList.Where(fdp => 
    searchValues.Any(sv => 
        Regex.IsMatch(sv, Regex.Escape(fdp.Type), RegexOptions.IgnoreCase)
    )
).ToList();

Regex.Escape会自动转义Type中的特殊字符(如., *),避免正则语法冲突。

验证逻辑

拿你的测试数据举例:

  • 搜索值处理后为mle12wbc7w1ar(或拆分为["MLE12WBC7W1", "A", "R"])
  • Type字段E12WBC7W1转小写后是e12wbc7w1,会被mle12wbc7w1ar包含,因此能成功匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:20:28