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

C# LINQ如何使用Contains方法实现跨集合多元素搜索

多元素列表包含判断的LINQ实现

你现有两个存储int类型数据的列表:

List<int> numberList = new List<int>() { 1, 2, 3, 4, 8, 10, 2};
List<int> numberListEnhanced = new List<int>() { 1, 2, 3, 5, 6};

目前你已经实现了单元素的Contains匹配,代码片段如下:

.....where numberListEnhanced.Contains((int)s.Id));

需要扩展为多元素的匹配校验,根据实际业务需求选对应写法即可:

  • 需求1:只要numberList中任意一个元素存在于numberListEnhanced中就判定匹配(交集判断)
    直接在where子句中用Any()扩展方法实现:
    .....where numberList.Any(item => numberListEnhanced.Contains(item)));
    
    如果列表数据量较大,或者是在EF Core这类数据库查询场景下使用,建议先把待匹配的列表转为HashSet减少重复遍历开销,性能提升会很明显:
    var matchSet = numberListEnhanced.ToHashSet();
    .....where numberList.Any(item => matchSet.Contains(item)));
    
  • 需求2:numberList中所有元素都存在于numberListEnhanced中才判定匹配(全量包含判断)
    把Any()替换为All()扩展方法即可:
    .....where numberList.All(item => numberListEnhanced.Contains(item)));
    
    大数据量场景同样可以用HashSet优化:
    var matchSet = numberListEnhanced.ToHashSet();
    .....where numberList.All(item => matchSet.Contains(item)));
    

注意:你当前的numberList中存在重复值(两个2),上述两种写法都可以正常处理重复值逻辑,不需要提前做去重操作,除非业务要求必须按去重后的值校验。如果是要校验实体对象s关联的集合属性,直接把代码里的numberList替换为s对应的集合属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:24:21