实体框架核心父级/子级带有多级子级的清理查询

拉美

我在清洁查询我的亲子而不在列表的根目录重复子代时遇到问题。

目的

 public class Office
    {

        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public bool Inactive { get; set; }
        public int? ParentId { get; set; }
        [ForeignKey("ParentId")]
        public Office Parent { get; set; }
        [InverseProperty("Parent")]
        public virtual ICollection<Office> Children { get; set; }
    }
}

查询

public async Task<IEnumerable<Office>> GetOffices()
        {
            return await _context.Offices.Where(os => !os.Inactive)
                   .Include(o => o.Parent)
                   .Include(o => o.Children).ToListAsync();
        }

结果

 {
        "id": 5,
        "name": "AA",
        "inactive": false,
        "parentId": null,
        "parent": null,
        "children": []
    },
    {
        "id": 10,
        "name": "BAA",
        "inactive": false,
        "parentId": 2,
        "parent": {
            "id": 2,
            "name": "BA",
            "inactive": false,
            "parentId": null,
            "parent": null,
            "children": []
        },
        "children": [
            {
                "id": 1011,
                "name": "BAAA",
                "inactive": false,
                "parentId": 10,
                "children": []
            }
        ]
    },
    {
        "id": 1011,
        "name": "BAAA",
        "inactive": false,
        "parentId": 10,
        "parent": {
            "id": 10,
            "name": "BAA",
            "inactive": false,
            "parentId": 2,
            "parent": {
                "id": 2,
                "name": "BA",
                "inactive": false,
                "parentId": null,
                "parent": null,
                "children": []
            },
            "children": []
        },
        "children": []
    },
,
    {
        "id": 2,
        "name": "BA",
        "inactive": false,
        "parentId": null,
        "parent": null,
        "children": [
            {
                "id": 10,
                "name": "BAA",
                "inactive": false,
                "parentId": 2,
                "children": [
                    {
                        "id": 1011,
                        "name": "BAAA",
                        "inactive": false,
                        "parentId": 10,
                        "children": []
                    }
                ]
            }
        ]
    }

这在根级别也有子对象,所以我尝试了这个

public async Task<IEnumerable<Office>> GetOffices()
        {
            return await _context.Offices.Where(os => !os.Inactive && !os.ParentId.HasValue).Include(o => o.Parent).Include(o => o.Children).ToListAsync();
        }

这是另一个查询的结果

{
        "id": 5,
        "name": "AA",
        "inactive": false,
        "parentId": null,
        "parent": null,
        "children": []
    },
    {
        "id": 2,
        "name": "BA",
        "inactive": false,
        "parentId": null,
        "parent": null,
        "children": [
            {
                "id": 10,
                "name": "BAA",
                "inactive": false,
                "parentId": 2,
                "children": null
            }
        ]
    }

这样就省去了ID 1010 BAAA子对象。想法上我想让它出来

{
        "id": 5,
        "name": "AA",
        "inactive": false,
        "parentId": null,
        "parent": null,
        "children": []
    },
    {
        "id": 2,
        "name": "BA",
        "inactive": false,
        "parentId": null,
        "parent": null,
        "children": [
            {
                "id": 10,
                "name": "BAA",
                "inactive": false,
                "parentId": 2,
                "children": [
                    {
                        "id": 1011,
                        "name": "BAAA",
                        "inactive": false,
                        "parentId": 10,
                        "children": []
                    }
                ]
            }
        ]
    }

无论我如何堆叠查询,我似乎都无法以这种方式显示它。有没有一种方法可以调整查询以允许此查询,或者通过简单的后查询命令仅修剪子级的根级别对象?

大师斯特隆

如果要获取有限数量的子级别(在此示例中为2),则可以尝试:

await _context.Offices
    .Where(os => !os.Inactive && !os.ParentId.HasValue)
    .Include(o => o.Parent)
    .Include(o => o.Children)
    .ThenInclude(o => o.Children)
    .ToListAsync()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有有效负载的实体框架代码优先自引用父级子级

来自分类Dev

实体框架优先优先加载父级子级-子级始终为空

来自分类Dev

wordpress 查询菜单顶级父级的所有子级

来自分类Dev

成功添加具有父级引用的子级实体后,子级不会显示在父级资源下

来自分类Dev

从Keystone.js中带有猫鼬的父级查询和映射单向引用的子级和子级子级

来自分类Dev

从Keystone.js中带有猫鼬的父级查询和映射单向引用的子级和子级子级

来自分类Dev

实体框架核心:从子级访问父级

来自分类Dev

如何强制(带有警告)覆盖其子级的子级调用父级函数?

来自分类Dev

实体框架6.1.3:投影-直接加载子级的子级

来自分类Dev

实体框架6克隆数据库中的父级和所有子级

来自分类Dev

使用实体框架在层次结构中映射父级子级

来自分类Dev

递归LINQ查询:选择项目以及所有带有子子级的子级

来自分类Dev

父实体上的WebAPI POST子级

来自分类Dev

实体框架6:删除子级

来自分类Dev

将子级添加到父级实体而不加载完整的子级图

来自分类Dev

当子级具有复合PK时,如何在父级实体中定义@OneToMany?

来自分类Dev

LINQ查询外部父级和子级(嵌套)表

来自分类Dev

查询:与父级 - 子级 - Fork - Pids 相关的循环

来自分类Dev

EF Core:计算实体的多级子级的数量

来自分类Dev

带有Flux的嵌套循环React组件,父级或子级的侦听器?

来自分类Dev

嵌套属性无法正常创建带有新父级的子级

来自分类Dev

NSManagedObjectContext子级/父级-子级未删除registeredObjects

来自分类Dev

NSManagedObjectContext子级/父级-子级未删除registeredObjects

来自分类Dev

routerLink 加载嵌套父级-> 子级-> 子级的页面

来自分类Dev

传递道具子级 -> 父级 -> 其他子级

来自分类Dev

如何使flexbox的父级具有其子级的宽度?

来自分类Dev

Oracle CONNECT BY递归子级到父级查询,包括自我引用的最终父级

来自分类Dev

Oracle CONNECT BY递归子级到父级查询,包括自我引用的最终父级

来自分类Dev

最佳选择:查询父级和子级的查询链或从父级的子级对象中选择

Related 相关文章

  1. 1

    具有有效负载的实体框架代码优先自引用父级子级

  2. 2

    实体框架优先优先加载父级子级-子级始终为空

  3. 3

    wordpress 查询菜单顶级父级的所有子级

  4. 4

    成功添加具有父级引用的子级实体后,子级不会显示在父级资源下

  5. 5

    从Keystone.js中带有猫鼬的父级查询和映射单向引用的子级和子级子级

  6. 6

    从Keystone.js中带有猫鼬的父级查询和映射单向引用的子级和子级子级

  7. 7

    实体框架核心:从子级访问父级

  8. 8

    如何强制(带有警告)覆盖其子级的子级调用父级函数?

  9. 9

    实体框架6.1.3:投影-直接加载子级的子级

  10. 10

    实体框架6克隆数据库中的父级和所有子级

  11. 11

    使用实体框架在层次结构中映射父级子级

  12. 12

    递归LINQ查询:选择项目以及所有带有子子级的子级

  13. 13

    父实体上的WebAPI POST子级

  14. 14

    实体框架6:删除子级

  15. 15

    将子级添加到父级实体而不加载完整的子级图

  16. 16

    当子级具有复合PK时,如何在父级实体中定义@OneToMany?

  17. 17

    LINQ查询外部父级和子级(嵌套)表

  18. 18

    查询:与父级 - 子级 - Fork - Pids 相关的循环

  19. 19

    EF Core:计算实体的多级子级的数量

  20. 20

    带有Flux的嵌套循环React组件,父级或子级的侦听器?

  21. 21

    嵌套属性无法正常创建带有新父级的子级

  22. 22

    NSManagedObjectContext子级/父级-子级未删除registeredObjects

  23. 23

    NSManagedObjectContext子级/父级-子级未删除registeredObjects

  24. 24

    routerLink 加载嵌套父级-> 子级-> 子级的页面

  25. 25

    传递道具子级 -> 父级 -> 其他子级

  26. 26

    如何使flexbox的父级具有其子级的宽度?

  27. 27

    Oracle CONNECT BY递归子级到父级查询,包括自我引用的最终父级

  28. 28

    Oracle CONNECT BY递归子级到父级查询,包括自我引用的最终父级

  29. 29

    最佳选择:查询父级和子级的查询链或从父级的子级对象中选择

热门标签

归档