如何使用Linq基于计数器设置属性

时间:2008-11-21 16:33:35

标签: linq linq-to-xml

假设我有一个看起来像这样的xml文档

<foo>
<bar id="9" />
<bar id="4" />
<bar id="3" />
</foo>

我想使用linq将id重置为0,1,2。 最简单的方法是什么?

由于

2 个答案:

答案 0 :(得分:3)

XElement xml = GetXml();
var i = 0;
foreach (var e in xml.Elements("bar"))
  e.SetAttributeValue("id", i++);

答案 1 :(得分:0)

你可以使用linq方法而不是foreach方法来实现它,但是没有太大的收获:

XElement xml = GetXml();
int updatedElements = xml.Elements("bar")
    .Select((x, i) =>
    {
        x.SetAttributeValue("id", i);
        return x;
    })
    .Count();

这里,Count()方法是枚举查询所必需的。任何枚举查询的东西都可以。

如果使用Select as a mutator困扰你(就像我一样),请使用List(T).ForEach:

XElement xml = GetXml();
xml.Elements("bar")
    .Select( (x, i) => new {x, i})
    .ToList()
    .ForEach(a => a.x.SetAttributeValue("id", a.i));