我是LINQ的新手。我有一个带有自定义属性的普通siteMap XML文档。其中一个属性是:id
我想使用LINQ来检索与自定义属性(id)的值匹配的单个节点。
等
我对LINQ的尝试看起来像这样:
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
var pageNode = from SiteMapNode node in nodes.Cast<SiteMapNode>()
where node["id"] == Convert.ToString(siteMapNodeId)
select node;
return (SiteMapNode)pageNode;
}
在调试期间,pageNode将被分配:
{System.Linq.Enumerable.WhereEnumerableIterator<System.Web.SiteMapNode>}
在return语句中抛出InvalidCastException:
Unable to cast object of type 'WhereEnumerableIterator`1[System.Web.SiteMapNode]' to type 'System.Web.SiteMapNode'.
任何帮助表示赞赏! :)
编辑:我在这里以更清晰的方式重新发布了这个问题:Re-worded Question
感谢Stefan让我走上正轨!
答案 0 :(得分:1)
您尝试将IEnumerable<SiteMapNode>
投射到SiteMapNode
。使用First
过滤并返回一个节点:
return nodes
.Cast<SiteMapNode>()
.First(node => node["id"] == Convert.ToString(siteMapNodeId));
答案 1 :(得分:0)
pageNode
是节点的序列。
您想要致电First()
以获取序列中的第一项。