你的問題還不夠清楚,我想你的問題是關於如何通過在每個屬性上進行分組來創建用戶列表的層次結構。
爲此,您可以使用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中創建樹狀視圖。 – SoniW