我是LINQ的新手。我有一個具有自定義屬性的普通siteMap XML文檔。其中一個屬性是:編號使用LINQ檢索與自定義屬性匹配的SiteMapNode
我想使用LINQ來檢索與自定義屬性(id)的值匹配的單個節點。
等
我在LINQ的嘗試看起來是這樣的:
{System.Linq.Enumerable.WhereEnumerableIterator<System.Web.SiteMapNode>}
,而在返回語句中引發InvalidCastException:
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變爲與分配:
Unable to cast object of type 'WhereEnumerableIterator`1[System.Web.SiteMapNode]' to type 'System.Web.SiteMapNode'.
任何幫助表示讚賞! :)
編輯:我重新張貼在一個更清晰的方式在這裏這樣的問題:Re-worded Question
感謝斯特凡爲把我在正確的軌道上!
感謝您的建議。我用您提供的代碼替換了FindNodeById方法中的代碼。但是,我現在收到一個InvalidOperationException:序列不包含匹配的元素。事實上,它似乎並沒有像lambda表達式那樣起作用。即使我將其更改爲使用其中一個強類型屬性(url或title),我仍然會得到InvalidOperationException錯誤。有任何想法嗎? – Craig
我做了一些更多的測試,實際上lambda表達式正在工作,除了SiteMap XML文件(url,title,description)中的強類型屬性,而不是自定義屬性(id,isHeaderItem等)。 ..我開始認爲你不能在一個lambda中使用一個自定義屬性,並且我可恥地無法在網絡上找到任何有關這個的東西。 – Craig
這是一個老問題,但是如果只有一個節點需要匹配'Single'或'SingleOrDefault'會更具體(因此表達了正確的含義)並且另外確保您沒有重複的ID。 –