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

EF Core+LINQ多字符串数组过滤列表失效问题求助

问题分析

你遇到的问题核心是大小写不匹配:你将过滤数组participantArray的所有元素转成了小写,但数据库中p.Person.Name的原始值未做大小写转换,导致多字符串过滤时,部分元素无法匹配到数据库中的对应值,最终没有符合条件的记录返回。

另外还要排查participantArray是否包含空白元素——比如用|分割时,可能产生空字符串或仅含空格的元素,这也会干扰过滤逻辑。

解决方案

1. 统一大小写匹配

将数据库中的Person.Name也转成小写后再判断包含关系,确保大小写一致:

var participantArray = query.Participant.Split('|')
    .Select(x => x.Trim().ToLower())
    .Where(x => !string.IsNullOrEmpty(x))
    .ToArray();

entities = entities.Where(x => x.Financeiro.Contrato.Participants.Any(p => participantArray.Contains(p.Person.Name.ToLower())));

2. (可选)使用EF Core不区分大小写查询

如果你的项目基于EF Core,也可以利用框架自带的不区分大小写比较方法,避免手动转小写:

var participantList = query.Participant.Split('|')
    .Select(x => x.Trim())
    .Where(x => !string.IsNullOrEmpty(x))
    .ToList();

entities = entities.Where(x => x.Financeiro.Contrato.Participants.Any(p => participantList.Any(pl => EF.Functions.Like(p.Person.Name, $"%{pl}%", StringComparison.OrdinalIgnoreCase))));

注意:EF.Functions.Like的第三个参数在不同EF Core版本中可能有差异,需根据实际版本调整。

3. 排查分割后的数组有效性

确保分割后的数组没有无效元素,比如空字符串、全空格字符串,这一步已经包含在上面的代码中,通过Trim()和Where(x => !string.IsNullOrEmpty(x))过滤掉无效项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:55:04