2013-09-18 2 views
0

У меня возникают проблемы с этим предложением where;LINQ to XML - атрибут родителя в том, где статья

from item in 
_documentRoot.Descendants("Level1").Descendants("Level2").Descendants("Level3") 
where 
_documentRoot.Descendants("Level1").Descendants("Level2").Attributes("id").First().Value == 12345 

Я хочу, чтобы список LEVEL3 элементов из элемента Level2, который имеет идентификатор 12345.

как всегда, большое спасибо

+0

Я не знаю, кто отправил ответ на этот вопрос, но я думаю, что они правильно, но не хватает SelectMany для потомков уровня 3 (отфильтруйте потомки уровня 2, а затем выберите их оценки уровня 3) – Sayse

ответ

0

что-то вроде этого (это непроверенные):

from item in _documentRoot.Descendants("Level1").Descendants("Level2") 
where item.Attributes("id").First().Value == "1234" 
select item.Descendants("Level3") 
0
var res = from item 
in _documentRoot.Descendants("Level1").Descendants("Level2") 
where item.Attributes("id").First().Value == "12345" 
select item.Descendants("Level3"); 
0
_documentRoot.Descendants("Level1") 
      .Descendants("Level2") 
      .Where(i => i.Attributes.Any(a => a.Value == "1234")) 
      .SelectMany(i => i.Descendants("Level3")); 

.SelectMany метод extenstion важно объединить все потомки Level3 в один IEnumerable

0

В случае возникновения проблем с атрибутом id.

_root.Descendants("Level1") 
    .Elements("Level2") 
    .Where(T => T.Attributes("id").Any(W => W.Value == "12345")) 
    .Elements("Level3"); 
1

Я бы с XPath здесь:

var items = xdoc.XPathSelectElements("//Level1/Level2[@id='1234']/Level3"); 

Он выбирает все элементы из Level3Level2 товар (ов), которые имеют атрибут id, равный 1234. При использовании метода LINQ синтаксис будет выглядеть следующим образом:

var items = xdoc.Descendants("Level1") 
       .Elements("Level2") 
       .Where(l2 => (string)l2.Attribute("id") == "1234") 
       .SelectMany(l2 => l2.Elements("Level3")); 
0
var res = from x in _documentRoot.Descendants("Level1").Descendants("Level2") 
where x.Attributes("ID").FirstOrDefault(id=> id.Value=="12345") != null 
select x.Descendants("Level3"); 
Смежные вопросы