C#Linq To Xml - 如何选择元素集合并使用lambda修改每个元素?

时间:2012-11-15 19:58:26

标签: c# linq

我想从XDocument中选择元素,并在单个lambda表达式中为每个元素添加一个属性。这就是我正在尝试的:

  xhtml.Root.Descendants()
            .Where(e => e.Attribute("documentref") != null)
            .Select(e => e.Add(new XAttribute("documenttype", e.Attribute("documentref").Value)));

这样做的正确方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

由于延迟执行LINQ,如果语句的结果从未迭代过,则属性不会被添加到XML中。

var elementsWithAttribute = from e in xhtml.Root.Descendants()
                            let attribute = e.Attribute("documentref")
                            where attribute != null
                            select e;

foreach (var element in elementsWithAttribute)
    element.Add(...);

答案 1 :(得分:0)

  xhtml.Root.Descendants()
            .Where(e => e.Attribute("documentref") != null)
            .ToList()
            .ForEach(e => e.Add( new.... ) );