LINQ查询中使用Where子句匹配列表值时出错求助
解决方法
问题出在你搞反了Contains的调用对象:你当前调用的是字符串类型的OrderStatus的Contains方法(该方法仅接收char或string参数),而不是判断状态列表是否包含当前实体的状态值。
正确的查询写法
把Where子句改成检查状态列表是否包含订单的OrderStatus:
var query = context.PurchaseOrders .Include(x => x.Supplier) .AsQueryable(); // 关键修改:用状态列表判断是否包含当前订单状态 query = query.Where(x => orderStatusList.Contains(x.OrderStatus!));
这段代码会生成你期望的IN语句SQL,和你给出的原生SQL逻辑完全一致。
额外注意事项
- 如果
orderStatusList可能为空,建议添加判断逻辑,避免生成无意义的查询(比如返回空结果或全量数据,根据业务需求选择):if (orderStatusList.Any()) { query = query.Where(x => orderStatusList.Contains(x.OrderStatus!)); } // 若列表为空,可选择不添加Where条件返回所有数据,或手动返回空集合 - 检查实体类的
OrderStatus字段名与数据库列名是否一致(你提供的原生SQL里写的是OrderStaus,注意拼写是否存在笔误)。
内容的提问来源于stack exchange,提问作者michael
相关产品推荐
相关产品推荐

