如何从SQL Server返回多条产品查询结果?解决查询报错问题
问题解决
报错原因
你使用的SingleOrDefault方法要求查询结果最多只能有1条数据,当数据库中存在多个匹配ProductName == name的记录时,就会抛出System.InvalidOperationException: Sequence contains more than one element异常。同时你的需求是模糊匹配(比如搜"Bike"返回包含该关键词的所有产品),原有的精确匹配逻辑也不符合需求。
修改后的代码
public List<Product> GetProductByName(string name) { using (var context = _dbContextFactory.CreateDbContext()) { // 用Where做模糊匹配,ToList()直接返回结果集合 return context.Product.Where(x => x.ProductName.Contains(name)).ToList(); } }
关键改动说明
- 替换
SingleOrDefault为Where:Where会返回所有匹配条件的记录,不会因为结果数量抛出异常 - 用
Contains替代==:实现模糊搜索,匹配产品名称中包含输入关键词的记录 - 直接返回
ToList()的结果:不需要手动创建List再添加元素,简化代码逻辑
可选优化(大小写不敏感匹配)
如果需要忽略大小写(比如搜"bike"也能匹配"Blue Bike"),可以根据数据库特性调整:
// 方法1:统一转小写(注意可能影响数据库索引效率) return context.Product.Where(x => x.ProductName.ToLower().Contains(name.ToLower())).ToList(); // 方法2:使用EF的Like函数(更适配数据库原生模糊查询) return context.Product.Where(x => EF.Functions.Like(x.ProductName, $"%{name}%")).ToList();
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

