Кривая обучения LINQ сегодня слишком крутая, поэтому я снова прихожу сюда за помощью. Очень благодарна заранее.LINQ to XML - список пользовательских объектов с атрибутами от родителя
Вот мой текущий код;
_myList = (
from listLv2 in
_documentRoot.Descendants("Level1").Descendants("Level2")
where
(string)listLv2.Attribute("id") == "12345"
let attrib_Colour = listLv2.Attribute("Colour")
let attrib_ID = listLv2.Attribute("id")
//select listLv2.Descendants("Level3") <---- not working
select new MyObj
{
let attrib_ChildID = ???..Attribute("id")
ParentColour = attrib_Colour.Value,
ParentID = attrib_ID.Value, // in this case 12345
ChildID = attrib_ChildID
}).ToList<MyObj>();
Вот что я пытаюсь достичь;
- создать список MyObjs. Я конвертирую элементы Level3 в MyObjs.
- Я хочу только элементы LEVEL3 в элементе Level2 с идентификатором 12345
- Я хочу использовать некоторые атрибуты из Level2 (ID = 12345) элемента в каждом из детей LEVEL3 элементы
Структура XML выглядит следующим образом.
<root>
<Level1>
<Level2 id="12345" colour="Red">
<Level3 id="0001" />
<Level3 id="0002" />
<Level3 id="0003" />
</Level2>
<Level2 id="45678" colour="Blue">
<Level3 id="0004" />
<Level3 id="0005" />
<Level3 id="0006" />
</Level2>
</Level1>
</root>
Объекты в списке должны быть такими;
MyObj.ParentID = 12345
MyObj.ParentColour = "Red"
MyObj.ID = 0001
MyObj.ParentID = 12345
MyObj.ParentColour = "Red"
MyObj.ID = 0002
MyObj.ParentID = 12345
MyObj.ParentColour = "Red"
MyObj.ID = 0003
От и где работают. Он выбирает 1 элемент, Level2 [id = 12345]. Ницца. Атрибуты Level2 работают.
Вот что я не могу решить;
- Как получить доступ к каждому ребенку LEVEL3 элемент, так что я могу преобразовать его в MyObj
- Как создать атрибут LEVEL3 (с помощью «пусть»). Я хочу использовать Пусть так, что я могу проверить нуль и т.д.
снова, спасибо
Cheers. Я не мог видеть SelectMany, о котором вы говорили, но этот код мне помог. Еще раз спасибо. – ausgeorge
@ausgeorge этот код скомпилирован в метод 'SelectMany' :) Я добавил несколько объяснений для вас. –
' Descendants' может иметь [удар производительности] (http://mjuraszek.blogspot.in/2013/08/why-not -use-descendants-method.html) для большого xml. – Anirudha