У меня есть файл Web.sitemap, использующий элементы siteMapNode
в XML.Я добавил пользовательские атрибуты для каждого тега.Я пытаюсь извлечь значение пользовательского атрибута 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 => 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
лямбда-выражением?
Я ценю любую помощь.
Хороших выходных!
Крейг