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

如何将字符串列表传入LINQ的Contains()方法实现数据查询

LINQ 传入字符串列表做Contains过滤的正确实现

场景1:筛选Code字段值存在于指定字符串列表中(对应SQL IN 逻辑,最常用)

这是该需求的常规实现,要注意把Contains方法调用放在你的字符串列表对象上,而不是字段上,示例如下:

// 1. 先定义你的过滤用字符串列表
List<string> targetCodeList = new List<string> { "code1", "code2", "code3" };

// 2. 编写查询逻辑
var test = _context.TableName
    .Where(e => e.type == "icon" && targetCodeList.Contains(e.Code))
    .ToList();

该写法会被EF/EF Core自动翻译为类似如下的SQL,性能有保障:

SELECT * FROM TableName WHERE type = 'icon' AND Code IN ('code1','code2','code3')

场景2:筛选Code字段值包含字符串列表中任意一个元素

如果你的需求是模糊匹配,只要Code包含列表中的任意一个子串就算符合条件,EF Core 3.0及以上版本可以用以下写法:

List<string> filterKeywords = new List<string> { "icon", "test", "admin" };

var test = _context.TableName
    .Where(e => e.type == "icon" && filterKeywords.Any(key => e.Code.Contains(key)))
    .ToList();

注意事项

  • 低版本EF/EF Core不支持场景2的写法,会触发客户端评估,导致全表数据加载到内存后再过滤,性能损耗极大,生产环境慎用
  • 你原来的写法是把字符串列表作为参数传入字段的Contains方法,等价于判断e.Code是否包含列表ToString后的固定字符串,完全不符合过滤需求

内容的提问来源于stack exchange,提问作者monika-115

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:04