通过LinqQuery获取对象

时间:2018-08-08 14:26:59

标签: xml linq

我有这个XML代码,我想过滤掉特定机构中的人。

</persons>
     <person>
    <name>
      <fn>Donald Duck</fn>
      <n>
        <family>Duck</family>
        <given>Donald</given>
      </n>
    </name>
    <email />
    <tel teltype="voice" />
    <tel teltype="mobile" />
    <adr>
    </adr>
    <institutionrole roletype="Employee" />
    <extension>
      <institutions>
        <institution institution="Division1">
        </institution>
    <institution institution="Division2">
        </institution>
      </institutions>
    </extension>
  </person>
</persons>

我要所有在部门Division2中的人。

有了此代码,我得到了所有员工,但并未按机构过滤。

    var users = (from person in xmlDoc.Descendants("person")
where (person.Element("institutionrole").Attribute("roletype").Value.ToLower() == "employee"

1 个答案:

答案 0 :(得分:0)

您可以使用以下类似内容基于嵌套元素进行过滤;这将过滤角色类型为“雇员”的人员,以及他们是否属于给定的机构。

var users = from person in xmlDoc.Descendants("person")
                    where person.Element("institutionrole").Attribute("roletype").Value.ToLower() == "employee"
                    && person.Descendants("institutions").Elements("institution").Attributes("institution").Where(ins=>ins.Value.ToLower() == "division2").Any()
                    select person;