LINQ to XML Group Query

时间:2011-06-09 17:26:25

标签: c# linq linq-to-xml

如果我有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>>,其中key是分组的名称和(“Type1”或“Type2”)。

3 个答案:

答案 0 :(得分:1)

如果您不需要随机访问这些项目,请使用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());

答案 1 :(得分:0)

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);

答案 2 :(得分:-1)

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);

类似的东西,你必须检查正确的语法,但基本上当你按某种东西分组时,你也有Key和Value,你可以使用ToDictionary方法将它转换成字典。