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

如何使用LINQ筛选字段值存在于指定字符串列表中的集合数据

解决方案

这个需求可以直接通过LINQ实现,你之前的写法错误的原因是混淆了Contains方法的调用主体和参数,同时存在int和string的类型不匹配问题,正确实现如下:

方案1:直接转换年份为字符串匹配(适合内存对象查询场景)

直接将Member的Year属性转为字符串,判断是否存在于yearList中:

// 注意LINQ方法名是大写开头的Where,C#是大小写敏感的
var filteredResult = data.Where(x => yearList.Contains(x.Year.ToString())).ToList();

方案2:先转换年份列表为int集合(性能更优,兼容EF等ORM数据库查询场景)

提前把字符串类型的年份列表转为int集合,避免循环中重复做字符串转换,执行效率更高:

// 先把年份列表转为int类型
List<int> yearIntList = yearList.Select(yearStr => int.Parse(yearStr)).ToList();
// 再做筛选
var filteredResult = data.Where(x => yearIntList.Contains(x.Year)).ToList();

错误原因说明

  • Contains是集合类的方法,作用是判断「参数传入的值」是否存在于当前集合中,所以正确的写法是集合.Contains(待检查的值),你之前写的x.Year.Contains(yearList)完全颠倒了调用关系
  • C#是大小写敏感的,你写的where小写也会导致编译报错,正确的LINQ方法名是大写的Where
  • Member的Year属性是int类型,和字符串类型的yearList存在类型差异,必须做显式的类型转换才能匹配

注:你给出的示例预期结果中包含了2014年的Bea,应该是笔误,以上代码执行后会正确筛选出2012年的Ralph、Rafael,以及2015年的Lee,共3条符合条件的数据。


内容的提问来源于stack exchange,提问作者Ralph Jason Caballes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:57:03