繁体   English   中英

Linq XDocument返回基于2个属性值的元素列表

[英]Linq XDocument return a list of elements based on 2 attribute values

是否可以基于2个匹配的属性值返回元素列表。 我尝试了以下方法,但均未成功。

var query = xdoc.Root.Elements("Root")
.Where(x => x.Attribute("Name").Value == "Value1")
.Where(x => x.Attribute("Name").Value == "Value2")
.Select(x => (string)x.Element("ElementName");

这是示例xml结构

    <Region Name="Leeds">
        <Group>
            <Data1>Some data 1</Data1>
            <Data2>Some data 2</Data2>
        </Group>
<Group>
            <Data1>Some data 1</Data1>
            <Data2>Some data 2</Data2>
        </Group>

    </Region>
    <Region Name="Armley">
        <Group>
            <Data1>Some data 3</Data1>
            <Data2>Some data 4</Data2>
        </Group>
    </Region>

提前致谢

您可以使用|| 在与@Adil建议的相同Where子句中,或使用Contains

var names = new [] { "Value1", "Value2" };

var query = xdoc.Root.Elements("Root")
                     .Where(x => names.Contains((string)x.Attribute("Name")))
                     .Select(x => (string)x.Element("ElementName");

我也将XAttribute.Value更改为(string)XAttribute以使其更安全。

您可能需要使用或|| 获取属性namevalue1value2 您拥有的语句将过滤掉属性名称为value1的记录,然后将属性名称应为value2的过滤器应用于过滤器,除非value1等于value2,否则该属性名是不可能的。

var query = xdoc.Root.Elements("Root")
.Where(x => x.Attribute("Name").Value == "Value1" || x.Attribute("Name").Value == "Value2")
.Select(x => (string)x.Element("ElementName");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM