당신의 질문이 모든 속성을 그룹화하여 사용자 목록에서 계층 구조를 만드는 방법에 관한 것 같아요.
그 목적으로 linq의 그룹화 기능을 사용할 수 있습니다.
var users = new[] {
new {
CompanyName = "c1",
Branch = "b1",
Destination = "d1",
UserName= "u1",
}, new {
CompanyName = "c1",
Branch = "b1",
Destination = "d1",
UserName= "u1",
}, new {
CompanyName = "c1",
Branch = "b1",
Destination = "d1",
UserName= "u1",
}, new {
CompanyName = "c2",
Branch = "b1",
Destination = "d2",
UserName= "u2",
},
};
var data = from u in users
group u by u.CompanyName into ug
select new { Node = ug.Key, Childs = ug };
foreach (var i in data)
{
Console.WriteLine(i.Node);
foreach (var node in i.Childs)
{
Console.WriteLine("\t" + node.UserName);
}
}
을 그리고 이것은 중첩 된 그룹에 코드입니다 : 다음은 첫 번째 수준에 대한 샘플입니다, 당신은 계층 구조를 만들 수 자체를 반복 할 수있다
var users = new[] {
new {
CompanyName = "c1",
Branch = "b3",
Destination = "d1",
UserName= "u1",
}, new {
CompanyName = "c1",
Branch = "b1",
Destination = "d1",
UserName= "u1",
}, new {
CompanyName = "c1",
Branch = "b1",
Destination = "d1",
UserName= "u1",
}, new {
CompanyName = "c2",
Branch = "b1",
Destination = "d2",
UserName= "u2",
},
};
var data = from u1 in users
group u1 by u1.CompanyName into gByCompanyName
select new
{
Node = gByCompanyName.Key,
Childs = from u2 in gByCompanyName
group u2 by u2.Branch into gByBranch
select new
{
Node = gByBranch.Key,
Childs = from u3 in gByBranch
group u3 by u3.Destination into gByDestination
select new
{
Node = gByDestination.Key,
Childs = from u4 in gByDestination
select new { Node = u4.UserName }
}
}
};
foreach (var n1 in data)
{
Console.WriteLine(n1.Node);
foreach (var n2 in n1.Childs)
{
Console.WriteLine("\t" + n2.Node);
foreach (var n3 in n2.Childs)
{
Console.WriteLine("\t\t" + n3.Node);
foreach (var n4 in n3.Childs)
{
Console.WriteLine("\t\t\t" + n4.Node);
}
}
}
}
Console.ReadLine();
도움이 되었기를 바랍니다.
알고 싶습니다. 그런 나무를 만드는 법? – SoniW
답변을 업데이트했습니다. 코드가 원하는 결과를 얻었 으면 간단하게 만드는 방법에 대해 더 많은 메모가 있습니다. – 000
감사합니다,이 코드는 분명히 나를 도울 것입니다,하지만 WPF에서 treeview를 만듭니다. – SoniW