Как использовать Linq для установки атрибутов на основе счетчика - PullRequest
1 голос
/ 21 ноября 2008

скажем, у меня есть XML-документ, который выглядит следующим образом

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

Я хотел бы использовать linq для сброса идентификаторов на 0, 1, 2. Какой самый простой способ сделать это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 21 ноября 2008
XElement xml = GetXml();
var i = 0;
foreach (var e in xml.Elements("bar"))
  e.SetAttributeValue("id", i++);
0 голосов
/ 21 ноября 2008

Вы можете сделать это с помощью методов linq, а не foreach, но не так много денег:

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

Здесь для подсчета запроса необходим метод Count (). Все, что перечисляет запрос, будет делать.

Если использование Select как мутатора беспокоит вас (как и меня), используйте вместо него List (T) .ForEach:

XElement xml = GetXml();
xml.Elements("bar")
    .Select( (x, i) => new {x, i})
    .ToList()
    .ForEach(a => a.x.SetAttributeValue("id", a.i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...