使用Umbraco 4.6+,有没有办法在C#中检索特定doctype的所有节点?我一直在寻找umbraco.NodeFactory命名空间,但还没有发现任何有用的东西.
seb*_*aan 16
我今天刚刚这样做,类似下面的代码应该工作(使用umbraco.presentation.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);
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_* 84 15
假如你只最终需要一对夫妇的特定类型的节点,这将是更有效地使用yield关键字,以避免检索比你必须:
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;
}
Run Code Online (Sandbox Code Playgroud)
因此,按类型获取节点的最终调用将是:
new Node(-1).GetDescendants().Where(x => x.NodeTypeAlias == "myNodeType")
Run Code Online (Sandbox Code Playgroud)
因此,如果你只想获得前五个,你可以添加.Take(5)到最后,你只会通过前5个结果递归,而不是拉出整个树.
| 归档时间: |
|
| 查看次数: |
15082 次 |
| 最近记录: |