Как перебрать результирующий набор элементов XML из запроса Linq - PullRequest
2 голосов
/ 02 февраля 2010

Это моя идея для кода (может ли запрос Linq заполнить объект словаря напрямую?).

XElement doc = XElement.Load(data.xml);
string Element = "KeyNode";
string SearchString = "Dominion";
Dictionary<string, string> QueryData = new Dictionary<string, string>();

var query = from child in doc.Descendants(Element)
            where SearchString == child.Value
            select pn.Parent.Elements();


foreach(XElement x in query)
{
    QueryData.Add(x.Name.ToString(),x.Value);
}

1 Ответ

1 голос
/ 02 февраля 2010

Я бы сделал это для создания словаря:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...