使用C#LINQ在具有等于某个值的子节点的2个标记中进行选择

本文关键字:2个 选择 行选 子节点 使用 于某个 C#LINQ | 更新日期: 2023-09-27 18:25:34

我正在尝试选择两个标记中的所有对象,特别是<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()  

但是从这里开始,但这抛出了一个错误消息

使用C#LINQ在具有等于某个值的子节点的2个标记中进行选择

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

第一个问题是需要一个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;