C#把sql集合进行分级(组织部门人员),并用layui树形组件展示

如上图,要分成1级是组织,2级是部门,3级是人员,如下

[{
        title: (组织名称)  
        ,children: [{
          title: (部门名称)
          ,children: [{
            title: (人员名称)
          }]
        }]
}]

1.后端

首先建立一个类

public class RlRqpOutPut
    {
        public int EmployeeId { get; set; }//人员ID
        public int DepartmentId { get; set; }//部门ID
        public int OrganizationId { get; set; }//组织ID
        public string Title { get; set; }

        public List<RlRqpOutPut> Children { get; set; }
    }

在逻辑层里面嵌入以下代码

//逻辑层调用方法
public Response QueryFLTreeList()
        {
           
            //查询出的sql结果
            var orgs = pmbbfxDAL.QueryFLData();
            //根据组织进行分组
            var orgGroups = orgs.Select(x => new { name = (string)x["OrganizationName"], id = (int)x["OrganizationId"] }).GroupBy(x => x.id)
                .Select(p => p.Key).ToList();
            
            var result = new List<RlRqpOutPut>();
            foreach (var orgId in orgGroups)
            {
                var name = (string)orgs.First(x => (int)x["OrganizationId"] == orgId)["OrganizationName"];
                var id = (int)orgs.First(x => (int)x["OrganizationId"] == orgId)["OrganizationId"];
                //得到第一层的组织名称与组织ID
                var org = new RlRqpOutPut {
                    OrganizationId= id,
                    Title = name,
                    Children = new List<RlRqpOutPut>()
                };
                //查组织下部门
                var depts = orgs.Where(x => (int)x["OrganizationId"] == orgId).Select(x => new { Name = (string)x["DepartmentName"], Id = (int)x["DepartmentId"] }).Distinct();
                foreach (var deptItem in depts)
                {
                    //得到第二层的部门ID和部门名称    
                    var dept = new RlRqpOutPut
                    {
                        DepartmentId=deptItem.Id,
                        Title = deptItem.Name,
                        Children = new List<RlRqpOutPut>()
                    };

                    //查部门下人员
                    var users = orgs.Where(x => (int)x["OrganizationId"] == orgId && (int)x["DepartmentId"] == deptItem.Id)
                        .Select(x => new { Name = (string)x["EmployeeName"], Id = (int)x["EmployeeId"] }).Distinct();
                    foreach (var userItem in users)
                    {
                        //得到第三三层的人员ID和人员名称
                        var user = new RlRqpOutPut
                        {
                            EmployeeId= userItem.Id,
                            Title = userItem.Name
                        };
                        //把第三层的人员镶嵌到第二层的部门的Children中
                        dept.Children.Add(user);
                    }
                    //把第二层的部门镶嵌到第一层的组织的Children中
                    org.Children.Add(dept);
                }
                //把结果加入到result里面
                result.Add(org);
            }

            return new Response
            {
                //返回result,result就是你想要的结果
                Result = result
            };
        }

主要就是通过linq查询来实现的分级

2.前端

把返回的result作为layui中树形组件的data即可

猜你喜欢

转载自blog.csdn.net/growb/article/details/123793546
今日推荐