2014-10-04 2 views
0

Я использую Visual Studio 2013, C# ...Попытка выбора элементов по дочернему элементу

У меня есть этот XML в переменной 'myXml':

<root> 
<article><title>A1</title><category><title>Geography</title></category></article> 
<article><title>A2</title><category><title>History</title></category></article> 
<article><title>A3</title><category><title>Geography</title></category></article> 
<article><title>A4</title><category><title>Finance</title></category></article> 
</root> 

Как я могу получить каждый, который имеет название категории «Финансы» с использованием LINQ2XML, либо как лямбда, либо простой запрос LINQ?

У меня есть этот запрос LINQ, который не работает:

var doc = XDocument.Parse(myXml); 

var l = (from d in doc.Elements("root").Elements("article") 
        where d.Elements("category").Elements("title").Equals("Finance") 
        select d); 
+0

К сожалению, это все еще не работает. –

+0

имя? вместо названия. Подожди секунду, я пытаюсь это сделать. – W92

ответ

0

он работает отлично:

 var query = from article in doc.Descendants("article") 
        where ((string)article.Element("category").Element("title").Value == "Finance") 
        select article; 

Метод Equals не для сравнения с другим объектом по вашему параметру. Пожалуйста, смотрите здесь: Distinct not working with LINQ to Objects

0

Я считаю, что это должен сделать это для вас

var l = from att in XDocument.Parse(myXml) 
       .Element("root") 
       .Elements("article") 
       .Elements("category") 
       .Where(x => x.Value == "Finance") 
       select att; 
1

Простое решение XPath будет

var l = doc.XPathSelectElements("/root/article[category/title/text() = \"Finance\"]"); 

Alernatively,

var l = (from d in elem.Element("root") 
      .Elements("article") 
      .Elements("category") 
      .Elements("title") 
      .Where(x => x.Value == "Finance") 
      select d.Parent.Parent); 
Смежные вопросы