使用C#LINQ在2个标签中选择具有等于某个值的后代节点?

时间:2013-07-29 20:26:35

标签: c# xml linq

我正在尝试选择2个标签中的所有对象,特别是<AR>,其中包含<AR>: <RL>的后代元素,其值为2。<RL>可以埋藏<AR>内的任意数量的级别,但始终在<AR>之内。我怎么能在LINQ中做到这一点?

EX1:

<ARS>
  <AR> 
    <EI> </EI>
      <RL>5</RL>
  </AR>
  <AR> 
    <EI> </EI>
      <RL>2</RL>
  </AR>  
</ARS>

结果:

  <AR> 
        <EI> </EI>
          <RL>2</RL>
  </AR>

我尝试使用

IEnumerable<XNode> test_var = from result in doc.Descendants("AR")
                                                  where result.DescendantNodes()  

但是从这里开始,但这引起了错误消息

2 个答案:

答案 0 :(得分:1)

首先,您需要select语句,例如添加select result

此外,您的where需要是布尔值。这听起来像是在寻找存在,这通常是通过Any()扩展方法处理的。

var searchString = "2";
IEnumerable<XElement> test_var = from result in doc.Descendants("AR")
                                 where result.Descendants("RL").Any(xelm => xelm.Value == searchString)
                                 select result;

答案 1 :(得分:1)

var test_var = from result in doc.Descendants("AR")
               where result.Descendants("RL").Any(x => (int)x == 2)
               select result;