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
相关产品推荐
相关产品推荐

