【发布时间】:2012-01-27 15:48:27
【问题描述】:
我有一个使用 XML 中的 siteMapNode 元素的 Web.sitemap 文件。我为每个标签添加了自定义属性。我正在尝试提取自定义属性id 的值。
我想在SiteMapNodeCollection 中找到一个与自定义属性id 匹配的siteMapNode。我可以使用foreach 循环来实现这一点,但我想使用 LINQ 让它变得简短而甜蜜。
--不起作用-- 函数如下:
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
return nodes
.Cast<SiteMapNode>()
.First(node => node["id"] == Convert.ToString(siteMapNodeId));
}
但是,我收到 InvalidOperationException => Sequence contains no matching element。如果我从自定义属性切换到默认的 .NET 属性,例如 URL(或标题),我可以毫无问题地恢复节点。
例如,对于 title 属性设置为“测试”的节点,此语句不会出现问题:
--工作--
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
return nodes
.Cast<SiteMapNode>()
.First(node => node.title == "Test");
}
谁能指出我缺少什么以便自定义属性值在.First lambda 表达式中匹配的正确方向?
感谢您的帮助。
周末愉快!
克雷格
【问题讨论】:
标签: c# xml linq sitemap custom-attributes