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

如何比较可空int类型Id与List<int>集合,判断Id是否在集合中

LINQ 可空int与int列表的包含判断实现

你现有代码的核心问题是第二段LINQ直接将单个可空int?类型的Id与整个List<int>做相等比较,类型逻辑完全不匹配,自然无法得到预期结果。你需要调用列表的Contains方法判断值是否存在于集合中。

实现方案

方案1:保留分步写法的修正版

你已经提前筛选了Id不为空的结果,直接取Id的Value属性判断即可:

var selectId = array.Where(x => x.Id != null);
// 修正后的第二行过滤逻辑
var result = selectId.Where(x => settings.PersonIds.Contains(x.Id.Value));

方案2:合并为单步查询(更简洁)

可以把非空判断和包含判断合并,无需拆分两次Where调用:

var result = array.Where(x => x.Id.HasValue && settings.PersonIds.Contains(x.Id.Value));

注意事项

  • 内存中执行LINQ to Objects时,必须保证调用x.Id.Value前已经判断Id不为空,否则会抛出InvalidOperationException异常。
  • 如果是EF Core等ORM场景下执行数据库查询,无需担心Value调用的异常问题,ORM会自动将可空类型的判断转换为对应SQL逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:07