2008-11-21 49 views
1

屬性說我有一個xml文件,看起來像這樣如何使用LINQ到設置基於計數器

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

我想使用LINQ到ID的重置爲0,1,2。 最簡單的方法是什麼?

感謝

回答

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

您可以使用LINQ方法代替的foreach做到這一點,但沒有對降壓多邦:

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

這裏,伯爵()方法是必要的枚舉查詢。列舉查詢的任何東西都可以。

如果使用選擇的突變困擾你(因爲它沒有我),使用名單(T).ForEach代替:

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

在大多數情況下,我們可以得到更多的簡單的代碼比查詢語句。但它似乎不是在這種情況下。 – 2008-11-24 14:00:37