Umbro 4.6+-如何在C#中按doctype获取所有节点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

使用Umbro 4.6+,是否有一种方法可以检索C#中特定文档类型的所有节点?我一直在寻找umbraco.NodeFactory命名空间,但还没有发现任何有用的东西。

提问于
用户回答回答于

我今天刚刚在做这件事,下面的代码应该可以工作(使用umbraco.Presation.nodeFactory),用nodeId-1调用它来获取站点的根节点,然后让它继续工作下去:

private void DoSomethingWithAllNodesByType(int NodeId, string typeName)
{
    var node = new Node(nodeId);
    foreach (Node childNode in node.Children)
    {
        var child = childNode;
        if (child.NodeTypeAlias == typeName)
        {
            //Do something
        }

        if (child.Children.Count > 0)
            GetAllNodesByType(child, typeName);
    }
}
用户回答回答于

如果你最终只需要几个特定类型的节点,那么使用LEVENT关键字来避免检索比必须检索更多的节点更有效:

public static IEnumerable<INode> GetDescendants(this INode node)
{
    foreach (INode child in node.ChildrenAsList)
    {
        yield return child;

        foreach (INode grandChild in child.GetDescendants())
        {
            yield return grandChild;
        }
    }
    yield break;
}

因此,按类型获取节点的最后调用将是:

new Node(-1).GetDescendants().Where(x => x.NodeTypeAlias == "myNodeType")

扫码关注云+社区