Используя LINQ to XML, как я могу сгруппировать элемент на основе его значения? - PullRequest
0 голосов
/ 15 февраля 2012

Ниже приведена структура моего XML-файла:

<adlibXML>
   <recordList>
        <record priref="1" selected="False">
              <collection>TEXTILES</collection>
              <someotherelements>xyz</someotherelements>
        </record>
        <record priref="2" selected="False">
                  <collection>CERAMICS</collection>
                  <someotherelements>xyz</someotherelements>
        </record>
        <record priref="3" selected="False">
                  <collection>PAINTING</collection>
                  <someotherelements>xyz</someotherelements>
        </record>
        <record priref="4" selected="False">
                  <collection>TEXTILES</collection>
                  <someotherelements>xyz</someotherelements>
        </record>
   </recordList>

Я получаю этот XML-файл, используя некоторые API из базы данных от поставщика. У меня есть три таблицы в моей новой базе данных: Каталог, Коллекция и Артефакты. Я хочу сгруппировать элемент коллекции на основе его значения, такого как «ТЕКСТИЛЬ», «КЕРАМИКА» и т. Д., И переменной счетчика для подсчета количества коллекций, которые у меня есть. С помощью которого я могу динамически создавать collectionID и collectionTitle в своей таблице Collection.

Я не могу решить это. До сих пор я делал только этот бит кода:

var getcontent = from record in xmldoc.Descendants("record")
                 //this group by doesn't work
                 group record by record.Element("collection")
                 select record.Element("collection").Value;                     

foreach (var node in getcontent)
{
    Response.Write("Collection: " + node + "<br/>");
}

1 Ответ

3 голосов
/ 15 февраля 2012

Попробуйте выполнить следующие действия:

var groups = from record in xmldoc.Descendants("record")
             group record by (string)record.Element("collection") into g
             select new {
               key = g.Key,
               count = g.Count()
             }

foreach (var group in groups)
{
  Response.Write("Collection " + group.key + " has " + group.count + " member(s).");
}
...