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

C#多LINQ条件链式查询用户异常:部分字段匹配结果不符

问题分析与修复方案

你的查询返回异常结果的核心问题是针对AthleteTeams的条件判断用错了方法,同时存在大小写处理不一致的问题:

  1. 错误使用All方法:
    All要求集合中的每一条记录都满足条件才会返回true,但你实际需要的是:用户的关联团队中只要有任意一条符合筛选条件就应该被选中,这时候应该用Any方法。

  2. 大小写处理不一致:
    前面的Name、Surname等字段都做了ToLower()处理来实现大小写不敏感查询,但Team.Name、AthleteGender、AthleteRace的判断没有统一处理,会导致大小写不匹配的情况被遗漏。


修正后的代码

data = data.Where(x =>
    x.Name.ToLower().Contains(filter.ToLower()) ||
    x.Surname.ToLower().Contains(filter.ToLower()) ||
    (x.PhoneNumber != null && x.PhoneNumber.ToLower().Contains(filter.ToLower())) ||
    x.Email.ToLower().Contains(filter.ToLower()) ||
    x.AthleteTeams.Any(at => at.Team.Name.ToLower().Contains(filter.ToLower())) ||
    x.AthleteTeams.Any(at => at.Athlete.AthleteGender.Equals(filter, StringComparison.OrdinalIgnoreCase)) ||
    x.AthleteTeams.Any(at => at.Athlete.AthleteRace.Equals(filter, StringComparison.OrdinalIgnoreCase))
);

额外优化点

  • 给PhoneNumber加了空值判断,避免NullReferenceException(如果电话号码可能为null的话)
  • 把filter也统一转成小写,避免因为输入的筛选值大小写导致匹配失败
  • 用StringComparison.OrdinalIgnoreCase代替ToLower()+Equals,性能更优且更严谨

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:41:04