как работать с linq to xml?

Всем здравствуйте. Прохожу обучение по .NET. Насыпали мне заданий. Порядок такой: нужно дописывать методы, которые потом прогоняются по заранее созданным тестам, и начисляются баллы. Блок с "простыми" запросами Linq я худо-бедно осилил. Но вот застрял с Linq To Xml. Помогите пожалуйста разобраться. Ибо я вообще не понимаю, что нужно делать. Вот код одного из заданий на эту тему:

        /// <summary>
        /// Creates hierarchical data grouped by category
        /// </summary>
        /// <param name="xmlRepresentation">Xml representation (refer to CreateHierarchySourceFile.xml in Resources)</param>
        /// <returns>Xml representation (refer to CreateHierarchyResultFile.xml in Resources)</returns>
        public static string CreateHierarchy(string xmlRepresentation)
        {
            throw new NotImplementedException();
        }

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

        [TestMethod]
        [TestCategory("LinqToXml.CreateHierarchyTest")]
        public void CreateHierarchyTest()
        {
            Assert.AreEqual(LinqToXmlResources.CreateHierarchyResultFile, LinqToXml.CreateHierarchy(LinqToXmlResources.CreateHierarchySourceFile));
        }

На сколько я понимаю, нужно написать linq для группировки, но даже не знаю с чего начать... Спасибо!


Ответы (1 шт):

Автор решения: Peterblr
public static string CreateHierarchy(string xmlRepresentation)
        {
            XElement doc = XElement.Parse(xmlRepresentation);
            var newData =
                new XElement("Root",
                    from data in doc.Elements("Data")
                    group data by (string)data.Element("Category") into groupedData
                    select new XElement("Group",
                        new XAttribute("ID", groupedData.Key),
                        from g in groupedData
                        select new XElement("Data",
                            g.Element("Quantity"),
                            g.Element("Price")
                        )
                    )
                );
            return newData.ToString();
        }
→ Ссылка