LINQ编写group by联表查询时报“prod不存在于当前上下文”错误
错误原因
LINQ查询中使用into g完成分组投影后,分组前声明的范围变量prod、arch会直接超出作用域,分组后的查询块仅能访问分组结果对象g,因此直接引用两个原变量会触发“名称不存在于当前上下文”的报错。
另外原逻辑仅将prod对象纳入分组,关联的archivo表数据未进入分组集合,即使修复作用域问题也无法读取到文件地址。
修正后实现代码
// GET: api/<Producto> [HttpGet] [Route("GetProd")] public IEnumerable<prodretorno> GetProd() { List<prodretorno> productos = (from prod in myDbContext.producto // 分组关联文件,同一产品的所有文件归集到archGroup集合 join arch in myDbContext.archivo on prod.idProducto equals arch.idProducto into archGroup select new prodretorno { nombre = prod.nombre, descripcion = prod.descripcion, codigo = prod.codigo, inventario = prod.inventario, precioPiso = prod.precioPiso, precioProv = prod.precioProv, precioPublico = prod.precioPublico, fecha = prod.fecha, Estatus = prod.Estatus, idProducto = prod.idProducto, // 取分组内第一条文件记录,满足列表页单产品单图要求 // 加空判断避免无关联文件时触发空引用异常 url = archGroup.FirstOrDefault()?.url ?? string.Empty }).ToList(); return productos; }
逻辑说明
- 采用
join ... into的分组关联写法,会自动将同一产品匹配到的所有文件归集到对应集合下,不会产生多图导致的产品重复行问题 - 列表场景通过
FirstOrDefault()取每个产品关联的第一张图片即可,不需要额外写group by逻辑 - 产品详情场景不需要做单条截断,直接按产品ID查询
archivo表中匹配的全部记录,即可返回该产品所有关联图片
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

