C# 使用属性值计算节点数

C# 使用属性值计算节点数,c#,.net,linq,linq-to-xml,C#,.net,Linq,Linq To Xml,我正在尝试从XmlDocument切换到Linq,并且正在努力获得我想要的东西 我有类似的XML <root> <Surfer Status='5'> <Name>Billy</Name> <County>Cornwall</County> </Surfer> <Surfer Status='5'> <Name>Tim</Name> <Co

我正在尝试从XmlDocument切换到Linq,并且正在努力获得我想要的东西

我有类似的XML

<root>
<Surfer Status='5'>
    <Name>Billy</Name>
    <County>Cornwall</County>
</Surfer>
<Surfer Status='5'>
    <Name>Tim</Name>
    <County>Cornwall</County>
</Surfer>
<Surfer Status='10'>
    <Name>Ryan</Name>
    <County>Devon</County>
</Surfer>
</root>
我希望能数一数所有状态为5的冲浪者

int fives = X.Descendants["Surfer[@Status='5']").Count();

但它不起作用

在以下位置使用

int fives = X.Descendants("Surfer").Where(s => (int)s.Attribute("Status") == 5).Count();
或者,如果您确实想使用XPath表达式,可以在使用System.Xml.XPath添加
并使用
XPathSelectElements
后使用:

int fives = X.XPathSelectElements("Surfer[@Status='5']").Count();

您可以使用带有谓词的
Count
重载

int fives = X.Descendants("Surfer").Count(x => x.Attribute("Status")?.Value == "5");

x.Attribute(“Status”)
将从
Surfer
元素和
中检索
Status
属性。
操作符防止
NullReferenceException
如果任何
Surfer
元素没有
Status
属性。

你所说的
它不工作是什么意思?您是否收到错误消息?或者你只是没有得到预期的结果?
int fives = X.Descendants("Surfer").Count(x => x.Attribute("Status")?.Value == "5");