【发布时间】:2011-03-21 11:41:45
【问题描述】:
我有一个集合演示了一个树形数据结构,它的节点是:
Node:
Id
Name
ParentID
现在,我想为这个集合中的每个节点获取level,我尝试使用以下代码,但我想知道这是否是实现它的最佳方式。
Func<int, int> GetLevel = (nodeID) =>
{
int _level = 0;
var _node = source.First(p => p.Id == nodeID);
// while hasn't reached the root yet
while (_node .ParentID.HasValue)
{
_level++;
_node = source.First(p => p.Id == _node.ParentID);
}
return _level;
};
// source is a collection of Node.
var query = from node in source
select new
{
Id = node.Id,
Name = node.Name,
ParentID = node.ParentID,
Level = GetLevel(node.Id)
};
我认为GetLevel 函数的开销能够减少。或者也许有更好的方法可以不用这个函数直接获取!
任何想法!
【问题讨论】:
标签: c# linq linq-to-objects