You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

关键说明

  1. 分组调整:把ShoeVariant和关联的Size数据一起分组,确保组内能直接获取尺码属性与对应库存值。
  2. 构建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:15:23