是否可以根据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>
提前致谢
答案 0 :(得分:3)
您可以在@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
以使其更安全。
答案 1 :(得分:1)
您可能需要使用或||
来获取属性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");