美文网首页
ABP Vnext 组织单元管理AbpOrganizationU

ABP Vnext 组织单元管理AbpOrganizationU

作者: 畅聊了个科技 | 来源:发表于2022-08-22 20:05 被阅读0次

在使用abp vnext默认数据库生成的组织单元表时AbpOrganizationUnits会发现有个Code字段,如图


image.png

这个字段看完里面的数据,就知道是一个新版的父子递归查询的方法,曾经的递归是父id遍历子id进行互相查询,效率上很低下。
这个时候abp vnext使用了一个字段就可以实现父子级遍历的功能。
先写一个web api接口

 /// <summary>
    /// 通过Code加载所有组织
    /// </summary>
    /// <returns></returns>
    public async Task<List<TreeChildViewDto>> GetByCodeAllAsync()
    {
        var dataList = await _organizationUnitRepository.GetListAsync();
        var items = from p in dataList
                    select new TreeChildViewDto()
                    {
                        Id = p.Id,
                        ParentId = p.ParentId,
                        Code = p.Code,
                        DisplayName = p.DisplayName
                    };
        return GetTree(items.ToList(), 0, "");
    }

这个就是一个查询,查询数据库的字段,select 出自己想在前端展示的字段,可以自定义加。最终的结果是List的集合数据,这时回调GetTree()函数,函数如下:

   /// <summary>
    /// 使用Code进行递归
    /// </summary>
    /// <param name="items"></param>
    /// <param name="deep"></param>
    /// <param name="prefix"></param>
    /// <returns></returns>
    private List<TreeChildViewDto> GetTree(List<TreeChildViewDto> items, int deep, string prefix)
    {
        return (
                        from p in items
                        where p.Code.StartsWith(prefix) && p.Code.Count(a => a == '.') == deep
                        let subs = GetTree(items, deep + 1, p.Code)
                        select new TreeChildViewDto()
                        {
                            Id = p.Id,
                            ParentId = p.ParentId,
                            Code = p.Code,
                            DisplayName = p.DisplayName,
                            TreeChildren = subs.ToList()
                        }
                ).ToList();
    }

返回的数据,就是父子级递归后的tree树集合了,其实也是递归,只不过是一个字段的递归。
此处用的类结构如下:

public class TreeChildViewDto
{
    //组织Id
    public Guid Id { get; set; }
    //菜单名
    public string DisplayName { get; set; }
    //父节点Id
    public Guid? ParentId { get; set; }
    /// <summary>
    /// 用来做递归的 新用法
    /// </summary>
    public string Code { get; set; }
    public List<TreeChildViewDto> TreeChildren { get; set; }
}

相关文章

网友评论

      本文标题:ABP Vnext 组织单元管理AbpOrganizationU

      本文链接:https://www.haomeiwen.com/subject/rszigrtx.html