C# LINQ to XML通过复制子节点属性选择节点

C# LINQ to XML通过复制子节点属性选择节点,c#,linq-to-xml,C#,Linq To Xml,需要调出有传呼机的员工 <Employees> <Employee> <Name>Michael</Name> <Phone Type="Home">423-555-0124</Phone> <Phone Type="Work">800-555-0545</Phone> <Phone Type="Mobile">424-555-0546</Phone> <Phone Type=

需要调出有传呼机的员工


<Employees>
  <Employee>
    <Name>Michael</Name>    
    <Phone Type="Home">423-555-0124</Phone>
    <Phone Type="Work">800-555-0545</Phone>
    <Phone Type="Mobile">424-555-0546</Phone>
    <Phone Type="Cell">424-555-0547</Phone>
    <Phone Type="Pager">424-555-0548</Phone>
  </Employee>
 <Employee>
    <Name>Jannet</Name>    
    <Phone Type="Home">423-555-0091</Phone>
    <Phone Type="Work">800-555-0545</Phone>
  </Employee>
</Employees>

您可能应该将其视为SQL语句

SELECT employee from Employees where Phone Type='Pager'
因此,from声明应该是员工。。。 注意:我在LINQ方面不是很好,但我认为想法是一样的…

这个怎么样:

var whoHasPager = from teamMember in data.Elements("Employee")
                where teamMember.Elements("Phone").Any(
                    p => p.Attribute("Type").Value == "Pager")
                select teamMember;
您可以尝试使用:


问题是
.Element
将返回第一个元素,而不是所有类型的Phone。

请尝试以下操作:

var whoHasPager = doc.XPathSelectElements(
    "//Employee/Phone[@Type = 'Pager']/.."
);
var whoHasPager = from teamMember in data.Elements("Employee")
                  where teamMember.Elements("Phone").Any(x => x.Attribute("Type").Value == "Pager")
                  select teamMember;

您提供的代码在哪里失败?你希望得到的数据是什么样的?他可以得到节点电话,但我想他不能再提到员工了。Yatzee!非常感谢。现在,我可以看到我如何向下钻取/将事物链接在一起。啊哈!这就是为什么“==”Home“手机返回一个节点的原因。
var whoHasPager = doc.XPathSelectElements(
    "//Employee/Phone[@Type = 'Pager']/.."
);
var whoHasPager = from teamMember in data.Elements("Employee")
                  where teamMember.Elements("Phone").Any(x => x.Attribute("Type").Value == "Pager")
                  select teamMember;