- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一些 C#(.NET) 来使用 Umbraco 4.7 将文章导入博客。简而言之,该算法旨在循环遍历每篇现有文章,并检查它是否与我们尝试从 XML 中提取的新文章具有相同的 ID。该算法运行良好,但我忍不住认为,对于我正在做的事情而言,拥有四个 foreach 循环效率极低。
foreach (Document yearNode in node.Children) //News > Years
{
foreach (Document monthNode in yearNode.Children) //Years > Months
{
foreach (Document dayNode in monthNode.Children) //Months > Days
{
foreach (Document newsItem in dayNode.Children) //Days > Articles
{
// If there isn't an ID match, go ahead and create a new article node.
}
这是没有主要功能的基本算法,只有 foreach 循环。它比简单地循环日历日期要复杂一些,因为它更像是一个包含特定节点的文件夹结构。任何人都可以提出一种简化方法吗?
最佳答案
使用通过 DocumentType
获取所有文章节点的想法, 你可以使用相当于 this GetDescendants extension method 的遍历特定文档类型的节点。
该方法是专门为 NodeFactory 的 Node
编写的类,但可以很容易地为 Document
重写.要使用扩展方法,您需要创建一个新类并将其设为静态。示例:
using System;
using System.Collections.Generic;
using umbraco.cms.businesslogic.web;
namespace Example
{
static class Extensions
{
public static IEnumerable<Document> GetDescendants(this Document document)
{
foreach (Document child in document.Children)
{
yield return child;
foreach (Document grandChild in child.GetDescendants())
{
yield return grandChild;
}
}
yield break;
}
}
}
然后在我们的上下文中使用该方法:
var myDocuments = new Document(folderId)
.GetDescendants()
.Cast<Document>()
.Where(d => d.ContentType.Alias == "myDocumentType");
if (myDocuments.Any(d => d.Id == myId))
{
...
}
注意:我不确定为什么,但似乎 .OfType<Document>()
或 .Cast<Document>()
在 .GetDescendants()
之后需要. (请参阅下面的编辑)
使用 NodeFactory 的 Node
会更有效率而不是 Document
因为 NodeFactory 从 XML 缓存中提取信息并且不会像 Document
那样每次都调用数据库做。使用 NodeFactory 的唯一缺点是它只包含那些已发布的节点,但通常您只想使用这些节点。参见 Difference between Node and Document .
编辑:经过一些修改后,我发现 Document
已经包含一个 GetDescendants()
方法并返回 IEnumerable
这就是为什么我们必须做 .Cast<Document>()
.所以看起来如果您选择仍然使用 Document
就可以避免创建扩展方法。 .否则,如果您仍想使用类似于上述扩展方法的方法,则需要将其重命名为其他名称。
关于c# - 检查树结构中的每个节点,Umbraco(提高效率),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391823/
嗨,我正在将 Umbraco 安装到我网站的根目录。而且我想将我的 wordpress 博客安装到根目录中的子文件夹中。 然而,对子文件夹的任何请求都被 Umbraco 拦截,并显示无法找到文档 UR
我对 umbraco 比较陌生,刚刚建立了网站,但客户要求一个具有全新外观和感觉的微型网站。 那么如何在 umbraco 中建立一个新的微型站点。 请帮忙。 万分感谢 最佳答案 要使 Umbraco
正如标题所问,Umbraco 将其版本信息存储在数据库的哪个位置? 最佳答案 它存储在 web.config 文件中(umbracoConfigurationStatus 设置)而不是数据库中。 理查
好吧,我刚刚在 Umbraco 的杂草中度过了过去 6-8 周的时间,并对我们的网站和环境进行了一些修复/改进。我花了很多时间尝试纠正较低级别的 Umbraco 缓存相关问题。现在反射(reflect
我正忙于学习 Umbraco,但我在 Internet 上看不到任何信息告诉我 Umbraco 是否允许我使用连接到 SQL Server 数据库的 C# 代码创建自定义 ASP.NET 表单。 如果
我正在尝试从数据库中导出成员属性,如名字、姓氏,但我似乎无法找到它。我看到有一个带有正确列的 loginUser 表,但它似乎只包含 5 个条目,而不是我在管理界面中看到的完整人员列表。 最佳答案 道
我们在后端有一个混合语言的 umbraco 安装。当我将用户的语言切换为“英语(英国)”或“英语(美国)”时,我仍然在后端看到一些德语单词,例如在搜索框中用“Durchsuchen”代替“Type t
我正在使用 umbraco cms 设置 af 多语言页面。 我有一个看起来像这样的内容结构: 内容 达 丹麦语子页 1 丹麦语子页 2 恩 英文子页1 英文子页2 我希望路由是这样的: http:/
我正在尝试在 umbraco 中创建一个新闻文件,它会在其中显示按月组织的新闻页面列表。每个页面都会显示当月新闻项目的列表。 我关注了 tutorial for creating news items
是否可以在 Umbraco 后台关闭 Umbraco 升级消息。不一定希望我的用户看到这一点。 最佳答案 有一个umbracoVersionCheckPeriod键入 appSettings web.
我的情况是,我负责为 Umbraco 制作应用程序或扩展,使后端用户能够将他们在开发站点上的更改迁移到实时站点。这种迁移应该每天发生一次,或者在后端用户按下后端的按钮时发生。 我知道 Umbraco
我想知道是否有人可以解释 Umbraco Cms Core Binaries Package 和 Umbraco Cms NuGet Package 之间的区别? 最佳答案 一个好问题。首先,我会推荐
有没有一种方法可以简单地在 umbraco 4 中创建文件夹以组织内容?我搜索了论坛并没有找到合理的答案。 最佳答案 这是文档有点缺乏的领域,但它是完全可行的: 创建一个名为“内容文件夹”之类的文档类
我最近决定与 Umbraco 一起开发我们的新公司网站 (http://www.idealcode.net:8005/AboutUs.aspx)。我聘请了一位 Umbraco 开发人员,我们开始工作。
有没有人遇到过 Umbraco 说内容更改已成功保存的问题,您关闭了所有内容(包括 webmatrix),然后返回并发现更改已丢失? 我正在我的本地主机上工作。 我认为这与 webmatrix 上的数
我已经创建了基于内置下拉列表的自定义数据类型,但不知道如何为列表指定默认值。默认值始终为空: 最佳答案 默认下拉不支持默认值 有两种方法可以实现你想要的 创建您自己的下拉数据类型(或使用其他人制作的插
我正在运行 umbraco 7 的一个实例。但我似乎无法设置 miniprofiler 来使用它。 在我的 global.asax 上设置: protected void Applicatio
我想将我自己的部分添加到 umbraco 仪表板,以便我可以将我自己的管理部分集成到现有的登录/管理结构中。如果不编辑和重新编译 umbraco 源代码本身,这可能吗?是否推荐?如果是这样,是否有人有
我想在 umbraco 4.7 中显示最后更新日期 假设我什至对管理面板中的内容进行了微小的更改,它都必须提取更新日期,以便我可以在网站的页脚中动态显示。 谢谢。 最佳答案 每个节点都有一个名为 up
我已经使用 Umbraco 6.02 创建了一个站点,现在我将检查该站点的所有最终配置,并且已经开始索引。我做了一些研究,但我无法简单地找到每个部分需要包含的内容以及原因。 我应该在 中包含哪些字段
我是一名优秀的程序员,十分优秀!