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

EF Core 7如何从指定子级获取同一父级的所有孙级数据?

解决方案

你可以利用EF的导航属性和LINQ的关联查询能力,一步完成数据筛选、关联加载与分组,彻底摆脱循环查询和存储过程的依赖:

方法1:通过子级导航关联查询

// 定位到mychild所属父级的所有孙级,包含关联Notes后按类别分组
var groupedGrandchildren = context.Children
    // 筛选出与mychild同属一个父级的所有子级
    .Where(child => child.ParentId == mychild.ParentId)
    // 平铺开所有子级对应的孙级数据
    .SelectMany(child => child.Grandchildren)
    // 加载孙级关联的Notes数据
    .Include(grandchild => grandchild.Notes)
    // 按孙级的类别分组
    .GroupBy(grandchild => grandchild.Category)
    .ToList();

方法2:直接从孙级表关联筛选

如果Grandchild实体已配置到Child的导航属性,也可以直接从孙级表出发查询,逻辑更直观:

var groupedGrandchildren = context.Grandchildren
    // 筛选出父级ID与mychild一致的所有孙级
    .Where(g => g.Child.ParentId == mychild.ParentId)
    // 加载关联的Notes数据
    .Include(g => g.Notes)
    // 按类别分组
    .GroupBy(g => g.Category)
    .ToList();

核心优势

  • 解决了原方法的N+1查询问题:EF会自动生成高效的JOIN语句,一次性拉取所有需要的数据,避免循环查询带来的性能损耗
  • 完全基于EF实体与导航属性实现,无需维护存储过程和额外返回实体,代码可读性、可维护性更强
  • 用LINQ原生语法完成分组逻辑,无需手动处理中间列表

内容的提问来源于stack exchange,提问作者Paul Gibson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:03:16