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





