EF Core中如何通过GroupJoin将图片列表映射到对象属性?
解决LINQ关联图片列表到自定义对象的问题
你现在的问题出在SelectMany操作上,它把GroupJoin得到的「每个商品对应一组图片」的结构扁平化了,导致最终每个EnrichedProduct只能拿到单张图片。
直接去掉SelectMany步骤,在GroupJoin的投影阶段就把图片列表赋值给WebshopImages属性即可:
var query = four.GroupJoin(this._context.Images, product => product.Product.BaseProductId, img => img.BaseProductId, (join, images) => new EnrichedProduct { Product = join.Product, WebshopImages = images.ToList() // 根据属性类型选择是否转List });
说明
GroupJoin的核心作用就是处理一对多关联,它会为four集合中的每个元素,匹配到_context.Images中所有关联的记录并形成一个集合。你不需要用SelectMany去拆分这个集合——那是要把一对多转成扁平化的一对一结构时才用的操作。
如果你的WebshopImages属性定义是IEnumerable<Image>,可以直接写WebshopImages = images;如果是List<Image>,就加上ToList()做类型转换。
内容的提问来源于stack exchange,提问作者KnApP993
相关产品推荐
相关产品推荐

