用户上下级关系、层级关系全部循环到一个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; } }