LINQ to XML - выбор элементов на основе значений, существующих в других элементах - PullRequest
0 голосов
/ 16 октября 2010

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

В приведенном ниже XML-коде я хочу выбрать только элементы «Option», содержащие значения, которые также содержатся в элементе AvailableOptions »для конкретного идентификатора продукта.

Что-то вроде следующего псевдокода:

Выберите все параметры, если указано имя параметра (выберите AvailableOptions, где ProductID = "xxx")

<Agents>
<Agent ID="1">
    <Login>111</Login>
    <Password>pass</Password>
    <Products>
        <Product ID="xxx">
            <AvaiableOptions>aaa,bbb</AvaiableOptions>
        </Product>
    </Products>
    <Products>
        <Product ID="yyy">
            <AvaiableOptions>bbb,ccc</AvaiableOptions>
        </Product>
    </Products>
    <Products>
        <Product ID="zzz">
            <AvaiableOptions>aaa,ccc</AvaiableOptions>
        </Product>
    </Products>
    <Options>
        <Option>
            <Name>aaa</Name>
            <Value>10</Value>
        </Option>
        <Option>
            <Name>bbb</Name>
            <Value>20</Value>
        </Option>
        <Option>
            <Name>ccc</Name>
            <Value>30</Value>
        </Option>
    </Options>
</Agent>

1 Ответ

0 голосов
/ 16 октября 2010

Это моя попытка, хотя и немного длинная.Надеюсь, это поможет.

var query = from agent in agents.Descendants("Agent")
            from products in agent.Descendants("Products")
            from product in products.Descendants("Product")
            where product.Attribute("ID").Value == "xxx"
            from options in agent.Descendants("Options")
            from option in options.Descendants("Option")
            where product.Element("AvaiableOptions").Value.Contains(option.Element("Name").Value)
            select option;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...