LINQ to XML - Запрос элементов - PullRequest
1 голос
/ 06 января 2011

 <Contents>
   <Content Book="ABC">
      <Item type="New" id="1" File="book1.out"/>
      <Item type="Old" id="2" File="book1.out"/>
   </Content
</Contents>

В приведенном выше XML мне нужно получить строку «Book1.out» в качестве вывода там где условие Book = "ABC" и ID = "1"

Как сделать это в LINQ за один раз, без повторения результатов.

Это мой начальный код:

var result = (from query in _configDoc.Descendants("Contents").Descendants("Content")
              where query.Attribute("Book").Value == "ABC") select query;

Спасибо ..

Ответы [ 2 ]

1 голос
/ 06 января 2011

Получить значение элемента Item с атрибутом book = "ABC" и id = 1:

var result = _configDoc.Descendants("Content")
   .Where(c => c.Attribute("Book").Value == "ABC")
   .Descendants("Item").Single(e => e.Attribute("id").Value == "1").Value;

Это простая версия без нулевой проверки атрибутов. Кроме того, в зависимости от вашего реального сценария, выражение XPath может быть проще.

0 голосов
/ 06 января 2011

Вы можете пропустить LINQ и использовать XPath вместо этого, например:

using System.Xml.XPath;

...
var result = _configDoc.XPathEvaluate("/Contents/Content[@Book='ABC']/Item[@ID='1']/@File");
...