XMLのsiteMapNode
要素を使用してWeb.sitemapファイルがあります。各タグにカスタム属性を追加しました。カスタム属性id
の値を抽出しようとしています。シーケンスに一致する要素が含まれていません - 返信SiteMapNode LINQを使用してカスタム属性に一致します
id
に一致するSiteMapNodeCollection
に1つのsiteMapNode
があります。私はforeach
ループを使用してこれを達成することができますが、LINQを使用して短くて甘いものにしたいと考えています。次のように
--DOESN'T WORK-- 関数である:
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
return nodes
.Cast<SiteMapNode>()
.First(node => node["id"] == Convert.ToString(siteMapNodeId));
}
しかし、私はInvalidOperationExceptionが=>Sequence contains no matching element
を受け取ります。カスタム属性からURL(またはタイトル)などのデフォルトの.NET属性に切り替えると、問題なくノードが返されます。 例えば、この文は、「テスト」に設定されているtitle
属性を持つノードに対して問題なく動作します:
--WORKS--
private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
return nodes
.Cast<SiteMapNode>()
.First(node => node.title == "Test");
}
誰として正しい方向に私を指すことができますカスタム属性の値が.First
のラムダ式で一致するためには、何が欠けていますか?
何か助けていただきありがとうございます。
素晴らしい週末を過ごしましょう!
クレイグ
ご意見ありがとうございます。私はそれを試して、ノードに 'null'を受け取ります。カスタム属性を使用しようとするたびに、ノードは返されません。 LINQは、 'siteMapNode'要素の強く型付けされた属性でのみ動作するようです。 – Craig
しかし、あなたはforeachループで動作すると言っています。なぜ、機械的にlinqクエリに書き換えることはできませんか? – user1096188