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

.NET Core/EF Core Linq如何获取含指定嵌套层级的实体?

用EF Core Linq实现4级嵌套导航属性查询

完全可以用EF Core的Linq实现这种固定4级嵌套的查询,核心是通过Include和ThenInclude的链式调用,逐层指定要加载的导航属性——不管是同实体的自嵌套还是跨实体的关联嵌套都能支持。

先明确实体结构(参考你的定义)

public class MainModel
{
    public int Id { get; set; }
    public ICollection<ModelA> ModelAs { get; set; }
    public ICollection<ModelB> ModelBs { get; set; }
}

public class ModelA
{
    public int Id { get; set; }
    // 自嵌套导航属性
    public ICollection<ModelA> ChildModelAs { get; set; }
    // 跨实体关联导航属性
    public ICollection<ModelB> RelatedModelBs { get; set; }
}

public class ModelB
{
    public int Id { get; set; }
    // 自嵌套导航属性
    public ICollection<ModelB> ChildModelBs { get; set; }
    // 跨实体关联导航属性
    public ICollection<ModelA> RelatedModelAs { get; set; }
}

4级嵌套查询的Linq实现示例

如果需要同时加载MainModel下的ModelA(含4级自嵌套+关联的ModelB4级嵌套)、ModelB(含4级自嵌套+关联的ModelA4级嵌套),可以这么写:

var mainModels = await dbContext.MainModels
    // 加载MainModel的ModelA集合,以及ModelA的4级自嵌套
    .Include(m => m.ModelAs)
        .ThenInclude(a => a.ChildModelAs)
            .ThenInclude(a2 => a2.ChildModelAs)
                .ThenInclude(a3 => a3.ChildModelAs)
        // 同时加载ModelA每一层关联的ModelB的4级嵌套
        .ThenInclude(a => a.RelatedModelBs)
            .ThenInclude(b => b.ChildModelBs)
                .ThenInclude(b2 => b2.ChildModelBs)
                    .ThenInclude(b3 => b3.ChildModelBs)
    // 加载MainModel的ModelB集合,以及ModelB的4级自嵌套
    .Include(m => m.ModelBs)
        .ThenInclude(b => b.ChildModelBs)
            .ThenInclude(b2 => b2.ChildModelBs)
                .ThenInclude(b3 => b3.ChildModelBs)
        // 同时加载ModelB每一层关联的ModelA的4级嵌套
        .ThenInclude(b => b.RelatedModelAs)
            .ThenInclude(a => a.ChildModelAs)
                .ThenInclude(a2 => a2.ChildModelAs)
                    .ThenInclude(a3 => a3.ChildModelAs)
    .ToListAsync();

补充说明

  • 如果只需要加载某一类嵌套(比如只需要ModelA的4级嵌套,不需要ModelB的),直接去掉对应的Include分支即可。
  • 这种手动链式调用只适合固定层级的场景,如果层级不固定,才需要考虑动态构建Include或者用递归逻辑,但你这里是明确的4级,手动写最直接。
  • 层级过多可能会生成复杂的SQL,影响查询性能,建议根据实际数据量评估,必要时可以拆分查询或用投影只加载需要的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:37:11