LINQ to XML Group Query - PullRequest
       3

LINQ to XML Group Query

0 голосов
/ 09 июня 2011

Если у меня есть xml вроде:

<List>
  <Item>
     <Type>Type1</Type>
  </Item>
  <Item>
     <Type>Type1</Type>
  </Item>
  <Item>
     <Type>Type2</Type>
  </Item>
</List>

Я просто хочу как-нибудь создать словарь или список, чтобы отразить это. Вот что у меня есть:

var grouped = (from p in _xmlDoc.Descendants("Item")
               group p by p.Element("Blah").Value into Items
               select Items);

Как бы я выбрал его, чтобы создать Dictionary<string, List<Item>>, где ключ - это имя группы и ("Type1" или "Type2").

Ответы [ 3 ]

1 голос
/ 11 июня 2011

Если вам не нужен произвольный доступ к элементам, используйте Lookup, вот для чего он нужен:

var lookup = _xmlDoc.Descendants("Item")
    .ToLookup(e => (string)e.Element("Blah"));

В противном случае, если вам нужен произвольный доступ, выбросьте их в словарь:

var dict = _xmlDoc.Descendants("Item")
    .GroupBy(e => (string)e.Element("Blah"))
    .ToDictionary(g => g.Key, g => g.ToList());
0 голосов
/ 09 июня 2011
var grouped = (from p in _xmlDoc.Descendants("Item")
               group p by p.Element("Blah").Value into Items
               select Items).ToDictionary(g=>g.Key, g=>g.Value);

Что-то в этом роде, вам придется проверять правильный синтаксис, но в основном, когда вы группируете по чему-то, у вас также есть ключ и значение, и вы можете использовать метод ToDictionary для преобразования этого в словарь.

0 голосов
/ 09 июня 2011
XDocument document = XDocument.Parse(xml);

var query = (from item in document.Descendants("item")
             select new
             {
                 Key = (int)item.Value,
                 Value = (string)item.Descendants("type").Value
             }).ToDictionary(pair => pair.Key, pair => pair.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...