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

EF Core如何筛选StatusId字段值在指定ID数组内的用户数据?

问题原因
  • 逻辑语义错误:你现在的代码是对IQueryable多次叠加Where条件,多个Where之间是*与(AND)*逻辑,相当于要求StatusId同时等于数组里的所有值,这本身是不可能满足的。
  • 闭包捕获变量问题:C#中foreach循环的循环变量在lambda表达式中捕获时,所有lambda会共享同一个变量实例。循环执行完成后,item变量的值是数组的最后一个元素8,所以最终所有拼接的Where条件实际都变成了x => x.StatusId == 8,所以最终只返回了状态为8的用户。
修正方案

直接使用EF Core原生支持的Contains方法即可,EF Core会自动将该方法翻译为SQL中的IN语句,完全匹配你要查询字段在指定数组内的需求:

int[] statusIds = {1,4,8};
IQueryable<User> result = _database.User
    .Where(x => statusIds.Contains(x.StatusId));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:21:04