使用API带Where条件查询数据库匹配数组内SN值的实现问题
解决方案
你可以直接使用LINQ的Contains方法实现数组匹配,EF Core/EF6 会自动将该方法翻译为SQL的IN查询语法,符合你筛选SN在指定数组内的需求。
修改后的完整代码
public class SNController : ApiController { [HttpGet] public HttpResponseMessage AllSN() { using (SNDBContext dbContext = new SNDBContext()) { string[] SNum = { "01070A2", "01070A3", "01070A4" }; // 仅修改Where条件即可 var SerialNum = dbContext.SNumbers.Where(x => SNum.Contains(x.SN)) .Select(p => new { p.Name, p.Status}) .ToList(); return Request.CreateResponse(HttpStatusCode.OK, SerialNum ); } } }
注意事项
如果你的SNum数组是动态生成的,建议提前判断数组是否为空,避免生成IN ()这类非法SQL语句引发报错,示例判断逻辑如下:
if(!SNum.Any()) { // 数组为空时按需返回空列表或者执行其他业务逻辑 return Request.CreateResponse(HttpStatusCode.OK, Enumerable.Empty<object>()); }
内容的提问来源于stack exchange,提问作者ASyK
相关产品推荐
相关产品推荐

