Si j'ai un ensemble de données d'employés similaires à:stratification hiérarchique dans 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"}
};
Serait-il possible d'utiliser LINQ pour ajouter des couches hiérarchiques, dans le sens où:
- PDG = 1 (en haut)
- CIO = 2 (deuxième niveau)
- XDIR et Ydir = 3 (troisième niveau)
- AMNGR = 4 (etc)
- ASUP = 5 (etc.)
Je suis en mesure de regrouper les employés selon SupervisorId, mais pas sûr de savoir comment faire le « niveau » se produire.
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);
}
Merci beaucoup.
Voulez-vous que le niveau soit le niveau appliqué à tous les membres du groupe. Si vous regardez le PDG du groupe, il y a 2 niveaux avec ça. –
@Leom, le PDG supervisorid est redondant, superviseur PDG = PDG.Donc l'idée est que là où SupervisorId = UserId, vous êtes CEO - l'arbre commence là. – dizzyguy