выбор дочерних дочерних элементов с помощью linq - PullRequest
0 голосов
/ 18 ноября 2010

Привет, я просто окунулся в LINQ-XML несколько дней назад и хотел бы знать, если я делаю что-то не так, или это просто невозможно. Я искал вокруг, и не было никаких проблем, связанных с моей, и теперь я немного осматривался.

XML:

<catalog>
<product description="Cardigan Sweater" product_image="cardigan.jpg">
<catalog_item gender="Men's">
  <item_number>QWZ5671</item_number>
  <price>39.95</price>
  <size description="Medium">
    <color_swatch image="red_cardigan.jpg">Red</color_swatch>
    <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
  </size>
  <size description="Large">
    <color_swatch image="red_cardigan.jpg">Red</color_swatch>
    <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
  </size>
</catalog_item>
<catalog_item gender="Women's">
  <item_number>RRX9856</item_number>
  <price>42.50</price>
  <size description="Small">
    <color_swatch image="red_cardigan.jpg">Red</color_swatch>
    <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
    <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
  </size>
  <size description="Medium">
    <color_swatch image="red_cardigan.jpg">Red</color_swatch>
    <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
    <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
    <color_swatch image="black_cardigan.jpg">Black</color_swatch>
  </size>
  <size description="Large">
    <color_swatch image="navy_cardigan.jpg">Navy</color_swatch>
    <color_swatch image="black_cardigan.jpg">Black</color_swatch>
  </size>
  <size description="Extra Large">
    <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch>
    <color_swatch image="black_cardigan.jpg">Black</color_swatch>
  </size>
</catalog_item>

и Запрос:

        var query =
        from size in
            (
                from catalogItem in cardigan.Descendants("catalog_item")
                where catalogItem.Attribute("gender").Value == "Men's"
                select catalogItem.Descendants("size")
            )
        select size.Elements("color_swatch");

это в основном дает мне все color_swatch для мужчин, но я пытался узнать, смогу ли я получить все color_swatch для больших мужчин.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2010

хорошо, так что я обошел вокруг еще немного ... и я понял ...

var query =        
from catalogItem in cardigan.Descendants("catalog_item")
where catalogItem.Attribute("gender").Value == "Men's"
from size in catalogItem.Descendants("size")
where size.Attribute("description").Value == "Large"
select size.Elements("color_swatch");

потратил на это около 8 часов, но я понял !!

Я пошели в основном получил пару сложных примеров XML, чтобы возиться с.Я думаю, это то, как вы учитесь.:)

спасибо, ребята:)

0 голосов
/ 18 ноября 2010

Просто измените ваш запрос на

    var query =
    from size in
        (
            from catalogItem in cardigan.Descendants("catalog_item")
            where catalogItem.Attribute("gender").Value == "Men's"
            select catalogItem.Descendants("size")
        )
    where size.Attribute("description") == "Large"
    select size.Elements("color_swatch");

Это сработает, потому что вы сначала получаете все элементы «Размер», которые относятся к мужчинам, а затем из этого списка он фильтрует только те, которые захватывают «Большие».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...