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

如何使用LINQ查询实现同时匹配FirstName与LastName的多关键词搜索

解决方案

实现思路

先将输入的搜索文本拆分为独立单词,统一转小写后去重,再分别判断FirstName、LastName列是否各至少包含一个拆分后的搜索词即可。

代码实现

第一步:预处理搜索文本

// 拆分搜索文本为单词、转小写、过滤空值、去重
var searchWords = SearchText.ToLower()
    .Split(' ', StringSplitOptions.RemoveEmptyEntries)
    .Distinct()
    .ToList();

第二步:修改LINQ查询语句

getQuery = _uow.GetRepository<EntityModel.UserOrganization>()
    .GetAll()
    .Where(x => 
        // FirstName列至少匹配一个搜索词
        searchWords.Any(word => x.User.FirstName.ToLower().Contains(word))
        // LastName列至少匹配一个搜索词
        && searchWords.Any(word => x.User.LastName.ToLower().Contains(word))
    );

注意事项

  • 上述写法支持EF/EF Core等主流ORM框架转SQL执行,不会触发客户端评估,性能有保障。
  • 如果你需要严格匹配完整单词(避免搜索ash命中Ashok这类子串匹配的情况),可以改用拆分字段后取交集的写法,该写法需要你的ORM支持Split方法的SQL转换:
    // 完整单词匹配版本
    getQuery = _uow.GetRepository<EntityModel.UserOrganization>()
        .GetAll()
        .Where(x => 
            x.User.FirstName.ToLower().Split(' ', StringSplitOptions.RemoveEmptyEntries).Intersect(searchWords).Any()
            && x.User.LastName.ToLower().Split(' ', StringSplitOptions.RemoveEmptyEntries).Intersect(searchWords).Any()
        );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:36:01