echarts的数据模型生成 C# 用户组织架构图

用户上下级关系、层级关系全部循环到一个Model里面去

public class UserController : ApiController
    {
        DAL.EF db = new DAL.EF();
        
        //上级结果只有一个 tree[0],用一个tree[0]存储当前用户以及所有下级的关系
        List<Models.User> tree = new List<Models.User>();

        //用一个V存储所有下级的echarts模型
        V_model V = new V_model();

        public string GetTreeJson(int id)
        {
            var list = db.User_Repository.dbSet.SqlQuery(@"WITH TREE AS(SELECT * FROM [User] WHERE userid = " + id + " UNION ALL SELECT [User].* FROM [User], TREE WHERE [User].ParentID = TREE.userid )SELECT* FROM TREE ").ToList();
            if (list.Count == 0)
            {
                return "";
            }
            //初始值
            var first = list[0];
            V.name = first.TrueName;
            V.value = first.UserNo;
            V.children = new List<V_model>();
            tree.Add(first);

            //开始递归
            AddSub(list,first,V);
            //递归完成
            return JsonConvert.SerializeObject(V) ;//输出echart 数据对象
            //return JsonConvert.SerializeObject(list) ;//输出Models.User对象
        }
        public void AddSub(List<Models.User> all, Models.User curUser,V_model vModel)
        {
            List<Models.User> sublist = all.Where(a => a.ParentID == curUser.UserID).ToList(); //得到子节点
            curUser.SubUsers = sublist;
            foreach (var subItem in sublist)
            {
                var vv = new V_model {
                    name = subItem.TrueName,
                    value = subItem.UserNo,
                    children = new List<V_model>()
                     };
                vModel.children.Add(vv);
                AddSub(all, subItem,vv);
            }
        }
    }
//Echarts数据对象模型
    public class V_model
    {
        public string name { get; set; }
        public string value { get; set; }
        public List<V_model> children { get; set; }
    }
public partial class User
    {
        [Key]
        public int UserID { get; set; }
        ......
        public int ParentID{get;set;}
        [NotMapped]
        public virtual List<Models.User> SubUsers { get; set; }
    }