2015-11-13 8 views
-1

Я пытаюсь связать результаты запроса Linq с XML с элементом управления DataList, и у меня возникли проблемы с возвратом всех дочерних значений. Вот мой XML ...Linq to XML Выбрать все родительские и дочерние элементы

<categories> 
    <category> 
    <parent-id>1234</parent-id> 
    <parent-name>Parent 1</parent-name> 
    <children> 
     <child-cat> 
     <child-id>5678</child-id> 
     <child-name>Child 1</child-name> 
     </child-cat> 
     <child-cat> 
     <child-id>2824</child-id> 
     <child-name>Child 2</child-name> 
     </child-cat> 
     <child-cat> 
     <child-id>2831</child-id> 
     <child-name>Child 3</child-name> 
     </child-cat> 
    </children> 
    </category> 
    <category> 
    <parent-id>6398</parent-id> 
    <parent-name>Parent 2</parent-name> 
    <children> 
     <child-cat> 
     <child-id>5564</child-id> 
     <child-name>Child 1</child-name> 
     </child-cat> 
     <child-cat> 
     <child-id>2824</child-id> 
     <child-name>Child 2</child-name> 
     </child-cat> 
     <child-cat> 
     <child-id>2831</child-id> 
     <child-name>Child 3</child-name> 
     </child-cat> 
    </children> 
    </category> 

Вот мой Linq запрос ...

var categories = XDocument.Load(Server.MapPath("/app_data/ShoppingCategories.xml")); 
     var allCats = from category in categories.Root.Descendants("category") 
      select new 
         { 
          parentId = category.Descendants("parent-id").First().Value, 
          parentName = category.Descendants("parent-name").First().Value, 
          childId = category.Descendants("child-cat").First().Value, 
          childName = category.Descendants("child-name").First().Value 
         }; 
     dtlstCategories.DataSource = allCats; 
     dtlstCategories.DataBind(); 

Мой результат выглядит следующим образом (я только отображая родитель-имя и имя-ребенок поля, идентификатор поля обязательные для скрытых полей) ...

родитель 1       родитель 2
Ребенок 1             Ребенок 2

Поскольку я использую .First() на дочерних элементах, я понимаю, что именно поэтому отображаются только первые, но я не могу понять, как их отобразить. Это то, что я после ...

Родитель 1       Родитель 2
Ребенок 1             Ребенок 1
Ребенок 2             Ребенок 2
Ребенок 3             Ребенок 3

Похоже, я довольно близко к тому, чтобы получить то, что хочу, но я просто не могу связать все это вместе. Любая помощь приветствуется!

EDIT

Вот мой DataList ...

<asp:DataList ID="dtlstCategories" runat="server" OnItemDataBound="dtlstCategories_ItemDataBound" Visible="True" RepeatColumns="5" RepeatDirection="Vertical" RepeatLayout="Table" ItemStyle-Wrap="True" BorderWidth="0" ItemStyle-HorizontalAlign="Left" ItemStyle-VerticalAlign="Top" ItemStyle-Width="170"> 
     <ItemTemplate> 
      <div style="padding-left:10px; padding-right:10px;">  
       <asp:HiddenField ID="hdnTopCategoryId" runat="server" Value='<%#DataBinder.Eval(Container.DataItem, "parentId") %>' /> 
       <asp:LinkButton ID="lnkTopCategory" runat="server" CssClass="support" Text='<%#DataBinder.Eval(Container.DataItem, "parentName") %>'></asp:LinkButton> 
       <asp:Image ID="imgCatDivider" runat="server" /> 
       <asp:HiddenField ID="hdnChildCatId" runat="server" Value='<%#DataBinder.Eval(Container.DataItem, "childId") %>' /> 
       <asp:LinkButton ID="lnkChildName" runat="server" CssClass="support" Text='<%#DataBinder.Eval(Container.DataItem, "childName") %>'></asp:LinkButton> 
      </div> 
     </ItemTemplate> 
    </asp:DataList> 

ответ

2

Я хотел бы написать что-то вроде этого

var allCats = categories.Descendants("child-cat") 
    .Select(c => new 
    { 
     parentId = c.Parent.Parent.Element("parent-id").Value, 
     parentName = c.Parent.Parent.Element("parent-name").Value, 
     childId = c.Element("child-id").Value, 
     childName = c.Element("child-name").Value 
    }) 
    .ToList(); 
+0

Это заставляет меня ближе, но теперь мой результат выглядит следующим образом ...
Padraig75

+0

@ Padraig75 Нравится что? – Eser

+0

Извините ... довольно новичок в SO и борется с помещением в комментарий. В основном я получаю вертикальный список родительского 1, ребенка 1, родителя 1, ребенка 2, родителя 1, ребенка 3 и т. Д. Вместо родительского 1, ребенка 1, ребенка 2, ребенка 3 – Padraig75

Смежные вопросы