特定节点上子节点返回的位置不包含“Where”的定义

时间:2013-12-17 08:52:07

标签: c# umbraco

我正在尝试获取特定节点的孩子。在特定节点子节点上使用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
    }

}

我缺少什么?

3 个答案:

答案 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无法解决此问题。