Если у меня есть набор данных сотрудников, подобные:Иерархического наслоение в Linq
var users = new[]
{
new {SupervisorId = "CEO", UserId = "CEO", UserName = "Joe"},
new {SupervisorId = "CEO", UserId = "CIO", UserName = "Mary"},
new {SupervisorId = "CIO", UserId = "XDIR", UserName = "Ed"},
new {SupervisorId = "CIO", UserId = "YDIR", UserName = "Lisa"},
new {SupervisorId = "XDIR", UserId = "AMNGR", UserName = "Steve"},
new {SupervisorId = "AMNGR", UserId = "ASUP", UserName = "Lesley"}
};
Можно ли использовать Linq для добавления иерархических слоев, в том смысле, что:
- CEO = 1 (верхний)
- CIO = 2 (уровень 2)
- XDIR и YDIR = 3 (третий уровень)
- АМНГР = 4 (и т.д.)
- АСУП = 5 (и т.д.)
Я был в состоянии сгруппировать сотрудников согласно SupervisorID, но не знаете, как сделать «уровень» произойдет.
var userGroups = from user in users
group user by user.SupervisorId into userGroup
select new
{
SupervisorId = userGroup.Key,
Level = ??????
Users = userGroup.ToList()
};
foreach (var group in userGroups)
{
Console.WriteLine("{0} - {1} - {2}", group.SupervisorId, group.Level, group.Users.Count);
}
Большое спасибо.
Вы хотите, чтобы уровень был уровнем, применяемым ко всем членам группы. Если вы посмотрите на генерального директора группы, то есть 2 уровня с этим. –
@ Leom, CEO supervisorid является избыточным, CEO supervisor = CEO.Поэтому идея заключается в том, что там, где SupervisorId = UserId, вы генеральный директор - дерево начинается там. – dizzyguy