实体类tree(有结构)

@ApiOperation(value = "库存列表2")
    @ApiImplicitParams({ 
        @ApiImplicitParam(name = "goodsname", value = "字典数据类型编号", required = false, dataType = "String", paramType = "query"),
    })
    @RequestMapping(value="/goodslist2",method=RequestMethod.GET)
    public Object GoodsList2(PgQuery pgq,String goodsname){
        
        String condition="";
        if ( StrUtils.hasText(goodsname)) {
            condition += " and goodsname = '" + goodsname + "'";
        }
        
        String dwcode = getzhutiuser().getDwcode();
        String sql = "select * from t_goods"
                + " where nvl(scbj,'0')='0'"
                + " and dwcode='"+dwcode+"' "
                + " and parentcode='0'"
                +condition
                +" order by goodscode asc";
        PagedList<ext_goods> pagedListData = jdbcDao.getPagedListData(ext_goods.class, sql, pgq);
        //最高节点的集合
        List<ext_goods> rows = pagedListData.getRows();
        //最高节点的集合(组装后)
        List<ext_goods> rows1 = new ArrayList<ext_goods>();
        if(!CollectionUtils.isEmpty(rows)){
            for(ext_goods ext_goods:rows){
                //给当前最高节点的现为null的children属性 赋值一个空的list
                ext_goods.setChildren(new ArrayList<ext_goods>());
                //给当前最高节点组装所有子节点
                ext_goods ext_goods1 = t_goodsDal.selectTree(ext_goods,dwcode);
                //节点放入空集合
                rows1.add(ext_goods1);
            }
        }
        pagedListData.setRows(rows1);
        
        return pagedListData;

    }


//查询当前节点所有子节点+调用拼装

public ext_goods selectTree(ext_goods ext_goodsparent,String dwcode) {
            
            //当前节点所有子节点
            List<ext_goods> li = this.selectChildren(ext_goodsparent.getGoodscode(),dwcode);
            //节点组装
            this.tree(ext_goodsparent, li,dwcode);
            
            return ext_goodsparent;
        } 


//查询当前节点所有子节点
        private List<ext_goods> selectChildren(String code,String dwcode) {
            String sql="select * from t_goods where parentcode='"+code+"' and dwcode='"+dwcode+"' and nvl(scbj,'0')='0'";
            List<ext_goods> list = jdbcDao.queryListForSql(sql, ext_goods.class);
            return list;
        }


// 节点组装
        private void tree(ext_goods ext_goodsparent, List<ext_goods> li,String dwcode) {
            
            if (!CollectionUtils.isEmpty(li)) {
                
                for (int i = 0, l = li.size(); i < l; i++) {
                    li.get(i).setChildren(new ArrayList<ext_goods>());
                    ext_goods ext_goods = li.get(i);
                    List<ext_goods> children = ext_goodsparent.getChildren();
                    children.add(ext_goods);// 添加到孩子节点列表
                    //当前子节点的子节点
                    List<ext_goods> list = this.selectChildren(ext_goods.getGoodscode(),dwcode);
                    tree(ext_goods, list,dwcode);// 递归,实现无限层级
                }
            }
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Entity Framework Core(EF Core)提供了一种构建树形结构的方法。在 EF Core 中,我们可以使用自引用关系(Self-Referencing Relationships)来构建树形结构。自引用关系是指一个实体可以与同一实体类型的其他实体发生关系。在树形结构中,每个节点都可以与其它节点发生关系,这些节点都是同一实体类型的实体。 为了演示如何使用 EF Core 构建树形结构,我们可以考虑一个简单的示例:假设我们有一个 Department(部门)实体,每个部门可以有一个或多个子部门,每个子部门也可以有自己的子部门。我们可以使用自引用关系来构建这个树形结构。具体来说,我们可以添加一个 ParentDepartment(父部门)导航属性和一个 ChildDepartments(子部门)集合导航属性到 Department 实体中。 在 EF Core 中,我们可以使用 Fluent API 来配置自引用关系。具体来说,我们可以使用 HasOne 和 WithMany 方法来定义父子关系。例如,下面的代码片段演示了如何定义 Department 实体的自引用关系: ``` public class Department { public int DepartmentId { get; set; } public string Name { get; set; } public int? ParentDepartmentId { get; set; } public Department ParentDepartment { get; set; } public ICollection<Department> ChildDepartments { get; set; } } public class MyDbContext : DbContext { public DbSet<Department> Departments { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Department>() .HasOne(d => d.ParentDepartment) .WithMany(d => d.ChildDepartments) .HasForeignKey(d => d.ParentDepartmentId); } } ``` 在这个示例中,Department 实体包含一个 ParentDepartmentId 属性和一个 ParentDepartment 导航属性,这两个属性定义了父子关系。同时,Department 实体还包含一个 ChildDepartments 导航属性,用于获取子部门列表。在 MyDbContext 类中,我们使用 HasOne 和 WithMany 方法来定义 Department 实体的自引用关系。 通过以上的配置,我们就可以使用 EF Core 来查询树形结构了。例如,下面的代码演示了如何查询指定部门的所有子部门: ``` var department = dbContext.Departments.Include(d => d.ChildDepartments).FirstOrDefault(d => d.DepartmentId == 1); var childDepartments = department.ChildDepartments; ``` 在这个示例中,我们使用 Include 方法来加载 ChildDepartments 导航属性,以便在查询结果中包含子部门列表。然后,我们使用 FirstOrDefault 方法来查询指定的部门,并获取其子部门列表。 以上就是使用 EF Core 构建树形结构的一个简单示例。当然,在实际开发中,我们可能需要更复杂的树形结构,需要根据具体情况进行配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值