C#where子句中的LINQ到XML
我有一篇xml文章:C#where子句中的LINQ到XML,c#,linq-to-xml,where-clause,C#,Linq To Xml,Where Clause,我有一篇xml文章: <result index="0" status="0"> <test field="aaa">value_a</test> <test field="bbb">value_b</test> <one> <name></name> <res1></res1
<result index="0" status="0">
<test field="aaa">value_a</test>
<test field="bbb">value_b</test>
<one>
<name></name>
<res1></res1>
</one>
<two>
<name></name>
<res2></res2>
</two>
<answer></answer>
<error></error>
</result>
var rez = from item in doc.Descendants("result")
where
select item;
foreach (var item in rez)
{
item.Element("res1").SetValue(x);
item.Element("res2").SetValue(y);
}
价值
价值
var rez=来自单据子体中的项目(“结果”)
哪里
选择项目;
foreach(rez中的var项目)
{
项目。元素(“res1”)。设定值(x);
项目。元素(“res2”)。设定值(y);
}
我应该在“where”中写些什么来选择一个项目(“结果”块),其中属性为“aaa”的元素“test”具有值_a,属性为“bbb”的元素“test”具有值_b我不确定这可能是您的意思
where item.Element("test").Value == "something"
&& item.Element("test").Attribute("field").Value =="aaa"
有几种不同的可能性,但为了清晰起见,我选择了提取值对,也许还有一点性能改进。如果测试元素的#数很高,则可以将测试对制作成字典
var rez = from item in doc.Descendants("result")
let testPairs = item.Elements("test")
.Select(t => Tuple.Create((string)t.Attribute("field"), (string)t)).ToArray()
where
testPairs.Any(t => t.Item1=="aaa" && t.Item2=="value_a") &&
testPairs.Any(t => t.Item1=="bbb" && t.Item2=="value_b")
select item;
“aaa”和“价值a”是如何联系在一起的?你有什么字典可以链接这些值吗?是的,它是字典,但我也想知道如何使用硬编码的“aaa”字符串进行测试。它知道它在这里看起来是哪个“test”元素吗?item.element(“test”).Value==“something”因为我需要的是属性为aaa的一个有值a,属性为bbb的一个有值b,而不是一个或另一个。