Зависит ли порядок LINQ to XML и можете ли вы с ним нумеровать результаты? - PullRequest
2 голосов
/ 02 февраля 2011

Итак, мой первый вопрос, LINQ to XML зависит от порядка?

С учетом XML (упрощенная версия фактического файла):

<root>
    <dl Id='111' Or='true' />
    <dl Id='112' Or='false' />
</root>

Контейнер:

public class root
{
    public int Position { get; set; }
    public int Id { get; set; }
    public bool Or { get; set; }
}

Код считывателя:

var t = a.DescendantsAndSelf("root").Descendants("dl").Select(b => new root
{
    Id = int.Parse(b.Attribute("Id").Value),
    Or = bool.Parse(b.Attribute("Or").Value)
});

Будут ли корневые элементы в t всегда в том порядке, в котором они были прочитаны из файла? Если нет, есть ли способ обеспечить порядок?

Второй вопрос, есть ли способ автоматически добавить число в код читателя, который говорит, был ли это первый, второй, третий и т. Д. Корень, который должен быть прочитан из XML? Так что в этом примере это так, что t будет содержать два элемента со значениями

  1. dl.Position = 1, dl.Id = 111, dl.Or = true
  2. dl.Position = 2, dl.Id = 112, dl.Or = false

1 Ответ

4 голосов
/ 02 февраля 2011

Да, LINQ "зависит от заказа".Ваши объекты создаются в том порядке, в котором они появляются в файле XML.

Чтобы получить позицию, используйте версию Select, которая включает индекс:

var t = a.DescendantsAndSelf("root").Descendants("dl").Select((b,idx) => new root
{
    Id = int.Parse(b.Attribute("Id").Value),
    Or = bool.Parse(b.Attribute("Or").Value),
    Position = idx+1
});
...