C# 如何正确执行Linq到XML查询?

C# 如何正确执行Linq到XML查询?,c#,linq-to-xml,C#,Linq To Xml,我有一个名为currentIndex的XDocument,如下所示: <INDEX> <SUBINDEX> <!-- Many tag and infos --> <SUBINDEX> <ITEM> <IDITEM>1</IDITEM> <ITEM> <ITEM> <IDITEM>2</IDITEM&g

我有一个名为currentIndex的XDocument,如下所示:

<INDEX>
   <SUBINDEX>
      <!-- Many tag and infos -->
   <SUBINDEX>
   <ITEM>
       <IDITEM>1</IDITEM>
   <ITEM>
   <ITEM>
       <IDITEM>2</IDITEM>
   <ITEM>
   ...
   <ITEM>
       <IDITEM>n</IDITEM>
   <ITEM>
</INDEX>
我想用C来做这件事,我试着用这种方式开始:

public void ParseItems(XDocument items)
{
    IEnumerable<XElement> items = from a in indexGenerale.Descendants(XName.Get("ITEM"))
                                  // where a.Element("IDITEM").Equals("2")
                                  select a;
    foreach(var item in items) {
        // do something
    }
}
现在的问题是:如果where子句被注释,items包含n个元素,每个ITEM标记一个元素,但是如果我删除注释,items是空的。为什么会有这种行为。如何执行搜索?

使用显式强制转换:

from a in indexGenerale.Descendants("ITEM")
where (string)a.Element("IDITEM") == "2"
a、 ElementIDITEM将返回一个XElement,它将永远不会等于2。也许您指的是a.ElementIDITEM.Value.Equals2,这也可以工作,但显式转换更安全。如果找不到元素,它不会引发异常“”,

使用显式转换:

from a in indexGenerale.Descendants("ITEM")
where (string)a.Element("IDITEM") == "2"
a、 ElementIDITEM将返回一个XElement,它将永远不会等于2。也许您指的是a.ElementIDITEM.Value.Equals2,这也可以工作,但显式转换更安全。如果找不到元素,它不会引发异常“”,

使用显式转换:

from a in indexGenerale.Descendants("ITEM")
where (string)a.Element("IDITEM") == "2"
a、 ElementIDITEM将返回一个XElement,它将永远不会等于2。也许您指的是a.ElementIDITEM.Value.Equals2,这也可以工作,但显式转换更安全。如果找不到元素,它不会引发异常“”,

使用显式转换:

from a in indexGenerale.Descendants("ITEM")
where (string)a.Element("IDITEM") == "2"
a、 ElementIDITEM将返回一个XElement,它将永远不会等于2。也许您指的是a.ElementIDITEM.Value.Equals2,这也可以工作,但显式强制转换更安全。如果找不到该元素,它不会引发异常`