Linq分组关联后如何获取ColorModel的SizeModel子列表
解决方案
不需要单独查询,你可以直接在分组后的集合中,通过遍历组内的ShoeVariant数据来构建对应的SizeModel子列表。
修改后的Linq查询代码
var result = ( from sv in _context.ShoeVariants join s in _context.Shoes on sv.ShoeId equals s.ShoeId join color in _context.Colors on sv.ColorId equals color.ColorId join sz in _context.Sizes on sv.SizeId equals sz.SizeId group new { sv, sz } by new { s.ShoeId, color.ColorId, color.ColorName } into g select new ColorModel { ShoeId = g.Key.ShoeId, ColorId = g.Key.ColorId, ColorName = g.Key.ColorName, Sizes = g.Select(item => new SizeModel { SizeId = item.sz.SizeId, SizeValue = item.sz.SizeValue, Stock = item.sv.Stock }).ToList() }).ToList();
关键说明
- 分组调整:把
ShoeVariant和关联的Size数据一起分组,确保组内能直接获取尺码属性与对应库存值。 - 构建SizeModel列表:通过
g.Select遍历组内每一项,将Size的属性和ShoeVariant中的Stock值映射到SizeModel,最后转成列表赋值给Sizes字段。
如果你的EF Core已配置导航属性(比如ShoeVariant.Size),还可以简化查询,无需显式关联Size表:
var result = ( from sv in _context.ShoeVariants.Include(sv => sv.Size).Include(sv => sv.Color) join s in _context.Shoes on sv.ShoeId equals s.ShoeId group sv by new { s.ShoeId, sv.Color.ColorId, sv.Color.ColorName } into g select new ColorModel { ShoeId = g.Key.ShoeId, ColorId = g.Key.ColorId, ColorName = g.Key.ColorName, Sizes = g.Select(sv => new SizeModel { SizeId = sv.Size.SizeId, SizeValue = sv.Size.SizeValue, Stock = sv.Stock }).ToList() }).ToList();
内容的提问来源于stack exchange,提问作者FishThing
相关产品推荐
相关产品推荐

