c# - 序列不包含匹配元素 - 使用 LINQ 返回匹配自定义属性的 SiteMapNode

标签 c# xml linq sitemap custom-attributes

我有一个使用 XML 格式的 siteMapNode 元素的 Web.sitemap 文件。我已经为每个标签添加了自定义属性。我正在尝试提取自定义属性 id 的值。

我想在 SiteMapNodeCollection 中找到与自定义属性 id 匹配的单个 siteMapNode。我可以使用 foreach 循环实现此目的,但我想使用 LINQ 使其变得简短而有趣。

--不起作用-- 函数如下:

private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
{
    return nodes
            .Cast<SiteMapNode>()
            .First(node => node["id"] == Convert.ToString(siteMapNodeId));
}

但是,我收到 InvalidOperationException => 序列不包含匹配元素。如果我从自定义属性切换到默认 .NET 属性,例如 URL(或标题),我可以毫无问题地取回节点。 例如,对于 title 属性设置为 'Test' 的节点,此语句没有问题:

--作品--

    private SiteMapNode FindNodeById(SiteMapNodeCollection nodes, int siteMapNodeId)
    {
        return nodes
          .Cast<SiteMapNode>()
          .First(node => node.title == "Test");
    }

任何人都可以指出我缺少的正确方向,以便在 .First lambda 表达式中匹配自定义属性值吗?

感谢任何帮助。

周末愉快!

克雷格

最佳答案

将 First 替换为 FirstOrDefault。但如果它崩溃了,则意味着没有满足条件的元素,因此结果将为 null。

关于c# - 序列不包含匹配元素 - 使用 LINQ 返回匹配自定义属性的 SiteMapNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036029/

相关文章:

c# - 自定义 DataTable 上的 LINQ 查询

C# 分部类和 get 访问器

c# - Windows 8 应用程序使用 Xaml 和 C# 以适应不同的屏幕尺寸和 DPI?

python - 使用 Python/Elementtree 将具有相同标签的多个子元素添加到 en XML 树中

java - 如何使用XSL动态设置属性值

c# - 解压时出现Gzip魔数(Magic Number)问题

c# - 使用 select 将 foreach 转换为 linq 表达式

c# - 在 Invoke/BeginInvoke 期间锁会发生什么情况? (事件派发)

c# - 如何在jquery中获取全局变量的值?

c# - 找不到查询 'Select' 的实现未找到