[英]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
以使其更安全。
您可能需要使用或||
获取属性name
为value1
或value2
。 您拥有的语句将过滤掉属性名称为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.