我有一个使用 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 => 序列不包含匹配元素
。如果我从自定义属性切换到默认 .NET 属性,例如 URL(或标题),我可以毫无问题地取回节点。
例如,对于 title
属性设置为 'Test' 的节点,此语句没有问题:
--作品--
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
return nodes
.Cast<SiteMapNode>()
.First(node => node.title == "Test");
}
任何人都可以指出我缺少的正确方向,以便在 .First
lambda 表达式中匹配自定义属性值吗?
感谢任何帮助。
周末愉快!
克雷格
最佳答案
将 First 替换为 FirstOrDefault。但如果它崩溃了,则意味着没有满足条件的元素,因此结果将为 null。
关于c# - 序列不包含匹配元素 - 使用 LINQ 返回匹配自定义属性的 SiteMapNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036029/