我使用了一个Tree控件来查看一些基于嵌套(父子)表的分层项。
每个节点都有一个NameValue格式,可以接受名称和值。
但是只有叶子(最后一个节点)的值是整数值,父节点的值是空的(只有它们的名字)。
我想总结值,以便每个父节点保存其子节点和叶子值的总和。
我认为递归或LINQ可能需要完成这个任务,但我不知道如何?
也许一些伪代码会对我有帮助。
提前感谢您的帮助!
这是未经测试的,但我认为它可能可以设置所有节点的所有值:
public void SetNodeValues(Node node)
{
if (node.Name == String.Empty)
{
//If it has no name it is a leaf, which needs no value
return;
}
else
{
//Make sure all child-nodes have values
foreach (var childNode in node.ChildNodes)
{
SetNodeValues(childNode);
}
//Sum them up and set that as the current node's value
node.Value = node.ChildNodes.Sum(x => x.Value);
}
}
这将为您做:
class Node
{
public Node()
{
Children = new List<Node>();
}
public IEnumerable<Node> GetSubTree()
{
return Children.SelectMany(c => c.GetSubTree()).Concat(new[] { this });
}
public List<Node> Children { get; set; }
public string Value { get; set; }
}
class Tree
{
public Tree()
{
Root = new Node();
}
public IEnumerable<Node> GetAllNodes()
{
return Root.Children.SelectMany(root => root.GetSubTree());
}
Node Root { get; set; }
//This is the Property you want:
public int GetValuesSum
{
get
{
return GetAllNodes().Where(node => !string.IsNullOrEmpty(node.Value)).Sum(node => Convert.ToInt32(node.Value));
}
}
}
参考:我如何使用LINQ从树中的所有节点获得列表?