Я бы сделал это для создания словаря:
var queryData = query.ToDictionary(x => x.Name.ToString(), x => x.Value);
Однако, это безопасно, только если вы знаете, что у вашего XML нет повторяющихся имен. Если у него могут быть повторяющиеся имена, вы можете получить отдельный список в своем запросе или исследовать ToLookup()
как альтернативу ToDictionary()
.
Кроме того, ваш код хранит имя тега в качестве ключа словаря. Если это то, что вам нужно, то отлично. Но если вам действительно нужно значение атрибута тега или что-то в этом роде, вам придется изменить свой код.
Обновление
Я думаю, что вижу, в чем проблема. Вы никогда не указывали, в чем заключается ваша трудность при повторении результатов, но я думаю, что это может быть так:
Метод Elements()
возвращает IEnumerable<XElement>
. Это означает, что тип вашей переменной query
на самом деле IEnumerable<IEnumerable<XElement>>
. Если вы хотите свести это к одному списку всех элементов, вот как:
var flattened = query.SelectMany(x => x);