Dataset 获取节点X级深度的有效方法

Dataset 获取节点X级深度的有效方法,dataset,umbraco,webforms,Dataset,Umbraco,Webforms,我有一个4层的深层节点结构,其中最顶层由1个根节点组成 我想做的是获取第四级中某个属性为真的所有节点,例如: 获取nodePropertyX==true的所有第四级节点 现在,我可以使用for-each循环来实现这一点,并迭代上面级别中的所有项,但我觉得这样做效率很低 我怎样才能以更好、更有效的方式来做呢?有没有办法缓存我的数据集?(我以数据表的形式返回结果) 首选的方法是什么:使用C#control(.ascx)或razor脚本(.cshtml) 根据您想对这些节点执行的操作,您可以使用raz

我有一个4层的深层节点结构,其中最顶层由1个根节点组成

我想做的是获取第四级中某个属性为真的所有节点,例如:

获取nodePropertyX==true的所有第四级节点

现在,我可以使用for-each循环来实现这一点,并迭代上面级别中的所有项,但我觉得这样做效率很低

  • 我怎样才能以更好、更有效的方式来做呢?有没有办法缓存我的数据集?(我以数据表的形式返回结果)

  • 首选的方法是什么:使用C#control(.ascx)或razor脚本(.cshtml)


  • 根据您想对这些节点执行的操作,您可以使用razor和内置的宏缓存功能来缓存宏的输出

    下面介绍如何从具有等于value的属性nodePropertyX的根节点获取第4级的所有节点:

    @foreach(@Model.AncestorOrSelf().subjections()中的变量项)
    .何处(“可见”)
    .其中(“4级”)
    .Where(“nodePropertyX==\“value\”)
    {
    }
    
    将此代码放在脚本文件(开发人员部分,节点脚本文件)中,使用此脚本文件创建宏,并将宏插入到要显示这些节点列表的任何位置(在任何模板上)


    为了缓存宏的输出,请选择宏并设置适当的属性(缓存周期、按页缓存和缓存个性化)。

    这会扫描整个内容树(尽管已缓存)?您可以编写自己的递归方法,该方法不会扫描级别4以下的内容
    @foreach (var item in @Model.AncestorOrSelf().Descendants()
        .Where("Visible")
        .Where("level=4")
        .Where("nodePropertyX == \"value\""))
    {
        <a href="@item.Url">@item.Name</a>
    }