LINQ to XML - 根据其他元素中存在的值选择元素

时间:2010-10-16 14:49:29

标签: linq linq-to-xml

我想我正在推动使用LINQ to XML的能力的界限,但是我想选择一组包含与另一个元素节点中包含的值匹配的值的元素。

在下面的XML中,我想只选择包含特定产品ID的AvailableOptions“元素中包含的值的”Option“元素。

类似下面的伪代码:

选择选项名称所在的所有选项(选择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 :(得分:0)

这是我的尝试,虽然有点冗长。希望它有所帮助。

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;