我有一个使用XML中的siteMapNode
元素的Web.sitemap文件。我已为每个标记添加了自定义属性。我正在尝试提取自定义属性id
的值。
我想在siteMapNode
中找到与自定义属性SiteMapNodeCollection
匹配的单个id
。我能够使用foreach
循环来实现这一点,但是我想使用LINQ使它变得简短而甜蜜。
- 不工作 - 功能如下:
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
return nodes
.Cast<SiteMapNode>()
.First(node => node["id"] == Convert.ToString(siteMapNodeId));
}
但是,我收到了InvalidOperationException =&gt; Sequence contains no matching element
。如果我从自定义属性切换到默认的.NET属性(例如URL(或标题)),我可以毫无问题地返回节点。
例如,对于title
属性设置为“Test”的节点,此语句可以正常运行:
- WORKS -
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
return nodes
.Cast<SiteMapNode>()
.First(node => node.title == "Test");
}
为了让自定义属性值在.First
lambda表达式中匹配,有人能指出我正确的方向吗?
我感谢任何帮助。
周末愉快!
克雷格
答案 0 :(得分:1)
首先使用FirstOrDefault替换。但如果它崩溃,则意味着没有满足条件的元素,因此结果将为null。