Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#where子句中的LINQ到XML_C#_Linq To Xml_Where Clause - Fatal编程技术网

C#where子句中的LINQ到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

我有一篇xml文章:

<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,而不是一个或另一个。