我正在尝试获取特定节点的孩子。在特定节点子节点上使用Where,但它返回:
'umbraco.NodeFactory.Nodes'不包含'Where'的定义
这是我的代码:
@using System.Linq
@using umbraco.NodeFactory
@{
var specificNode = new Node(xxxx);
var childNodes = specificNode.Children.Where(i => i.IsVisible());
foreach (var theItem in childNodes)
{
// do something
}
}
我缺少什么?
答案 0 :(得分:3)
你的“childNodes”变量它不是IEnumberable,它是一个umbraco.NodeFactory.Nodes类型。
使用Node,您可以执行此操作:
var node = new Node(xxx);
var children = node.ChildrenAsList.Where(x => x.NodeTypeAlias == "yourDocTypeAlias");
由于您要使用ChildrenAsList,并且像middlepat告诉List继承了IEnumerable,所以现在您可以使用linq扩展。
但你也可以用DynamicNode做这样的事情:
var node = new DynamicNode(xxx);
var children = node.Descendants("yourDocTypeAlias");
或者:
var node = new DynamicNode(xxx);
var children = node.Children.Where(x => x.NodeTypeAlias == "yourDocTypeAlias");
查看 this。如果您使用的是U6,我建议您使用UmbracoHelper
答案 1 :(得分:1)
你记得包括
吗?using System.Linq;
在顶部?
答案 2 :(得分:1)
尝试将@using System.Linq
放在顶部。
由于Linq是扩展方法,因此您必须自己将using语句放在那里。 Visual Studio无法解决此问题。