如何使用Lambda/Linq实现多关键词Contains任意匹配查询
实现代码
你可以直接通过Any()扩展方法搭配Lambda实现需求,逻辑和你给出的原生SQL完全等价。
假设你的待检索关键词列表为List<string> keywords,核心写法如下:
Lambda 写法(优先推荐)
var newList = MainList.Where(m => keywords.Any(keyword => m.Comments.Contains(keyword))).ToList();
LINQ 查询语法写法
var newList = from m in MainList where keywords.Any(keyword => m.Comments.Contains(keyword)) select m;
补充说明
- 如果是EF/EF Core查询数据库的场景,以上写法会被自动转换为
like '%keyword1%' or Comment like '%keyword2%'...结构的SQL语句,不需要手动拼接查询条件。 - 如果需要忽略大小写匹配,本地查询时可以调整
Contains参数:m.Comments.Contains(keyword, StringComparison.OrdinalIgnoreCase) - 数据库查询场景下如果提供程序不支持
StringComparison参数,可以统一转为大小写后比对:m.Comments.ToLower().Contains(keyword.ToLower())
内容的提问来源于stack exchange,提问作者OmC'ist
相关产品推荐
相关产品推荐

