如何建立与使用LINQ层次结构对象? [英] How to build a hierarchy with use Linq to object?
本文介绍了如何建立与使用LINQ层次结构对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有数据结构的列表:
公开名单<个人及GT;征婚启事()
{
返回新的List<个人及GT;
{
新的个人
{
ID = 0,
名称=名称0
},
新的个人
{
ID = 1,
名称=名称1,
的ParentId = 0
},
新的个人
{
n = 2,
名称=名称2,
的ParentId = 0
},
新的个人
{
ID = 3,
名称=名称3,
的ParentId = 0
},
新的个人
{
ID = 4,
名称=名称4,
的ParentId = 1
},
新的个人
{
n = 5,
名称=名称5,
的ParentId = $ 1 b $ b},
新的个人
{
n = 6,
名称=名称6,
的ParentId = 2
},
新的个人
{
n = 7,
名称=名称7,
的ParentId = 2
},
新的个人
{
n = 8,
名称=名称8,
的ParentId = 4
},
新的个人
{
标识= 9,
NAME =9名,
的ParentId = 4
},
};
}
和我想建立一个树:
公开名单<&树GT;树()
{
返回新的List<&树GT;
{
新树
{
ID = 0,
名称=名称0,
名单=新名单<树>
{
新树
{
ID = 1,
名称=名称1,
名单=新名单<树>
{
新树
{
ID = 4,
名称=名称4
},
新树
{
n = 5,
名称=名称5
}
}
}
}
}
};
}
你如何建立使用LINQ树对象?我必须使用,但它并不完全正常工作,见下图:
公开名单<&树GT; GetTree(列表<个人及GT;清单)
{
VAR listFormat = list.Select(X =>新建树
{
n = x.Id,
名称= x.Name,
的ParentId = x.ParentId
})了ToList();
VAR查找= listFormat.ToLookup(F => f.ParentId);
的foreach(在listFormat VAR树)
{
tree.List =查找[tree.Id] .ToList();
}
返回listFormat;
}
解决方案
您应该使用递归:
公共无效的someMethod(){
//在这里得到你的`list`
VAR树= GetTree (列表0);
}
公开名单<&树GT; GetTree(列表<个人及GT;列表,诠释父){
返回list.Where(X => x.ParentId ==父)。选择(X =>新建树{
编号= X。 ID,
名称= x.Name,
名单= GetTree(列表,x.Id)
})了ToList()。
}
I have a list of data structures:
public List<Personal> Personals()
{
return new List<Personal>
{
new Personal
{
Id = 0,
Name = "Name 0"
},
new Personal
{
Id = 1,
Name = "Name 1",
ParentId = 0
},
new Personal
{
Id = 2,
Name = "Name 2",
ParentId = 0
},
new Personal
{
Id = 3,
Name = "Name 3",
ParentId = 0
},
new Personal
{
Id = 4,
Name = "Name 4",
ParentId = 1
},
new Personal
{
Id = 5,
Name = "Name 5",
ParentId = 1
},
new Personal
{
Id = 6,
Name = "Name 6",
ParentId = 2
},
new Personal
{
Id = 7,
Name = "Name 7",
ParentId = 2
},
new Personal
{
Id = 8,
Name = "Name 8",
ParentId = 4
},
new Personal
{
Id = 9,
Name = "Name 9",
ParentId = 4
},
};
}
and I want to build a tree:
public List<Tree> Trees()
{
return new List<Tree>
{
new Tree
{
Id = 0,
Name = "Name 0",
List = new List<Tree>
{
new Tree
{
Id = 1,
Name = "Name 1",
List = new List<Tree>
{
new Tree
{
Id = 4,
Name = "Name 4"
},
new Tree
{
Id = 5,
Name = "Name 5"
}
}
}
}
}
};
}
How do you build a tree with LinQ to object? I have to use but it doesn't work exactly, see below:
public List<Tree> GetTree(List<Personal> list)
{
var listFormat = list.Select(x => new Tree
{
Id = x.Id,
Name = x.Name,
ParentId = x.ParentId
}).ToList();
var lookup = listFormat.ToLookup(f => f.ParentId);
foreach (var tree in listFormat)
{
tree.List = lookup[tree.Id].ToList();
}
return listFormat;
}
解决方案
You should use recursion:
public void SomeMethod() {
// here you get your `list`
var tree = GetTree(list, 0);
}
public List<Tree> GetTree(List<Personal> list, int parent) {
return list.Where(x => x.ParentId == parent).Select(x => new Tree {
Id = x.Id,
Name = x.Name,
List = GetTree(list, x.Id)
}).ToList();
}
这篇关于如何建立与使用LINQ层次结构对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文