LINQ到XML的c# where子句

本文关键字:where 子句 XML LINQ | 更新日期: 2023-09-27 18:05:55

我在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);
                }

我在"where"里面写什么来选择一个项目("result"块),其中元素"test"的属性"aaa"有value_a,元素"test"的属性"bbb"有value_b

LINQ到XML的c# where子句

有几种不同的可能性,但为了清晰起见,我选择取出值对,并可能略微提高性能。如果test元素的#值很高,则可以将testPairs创建为字典。

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;

我不确定可能这就是你的意思

where item.Element("test").Value == "something" 
&& item.Element("test").Attribute("field").Value =="aaa"