Сортировка / упорядочение узлов в xml с использованием IComparer

Мне нужно отсортировать узлы в XML. У меня есть следующий код, который успешно упорядочивает их в алфавитном порядке. Тем не менее, большая часть данных является числовой, хотя строки допускаются. У меня есть настроенный IComparer, который работает для правильной сортировки данных, так как я хочу, чтобы они появлялись в другом месте.

System.Xml.Linq.XDocument output = new System.Xml.Linq.XDocument(
                    new System.Xml.Linq.XElement("xml",
                from node in input.Root.Elements("training")
                orderby node.Attribute("order").Value
                select node));

Я нашел, как использовать IComparer в вызове метода, .OrderBy(x => x, new CustomComparer()) Но я не понял, как заставить это работать с XML. Из того, что я прочитал онлайн, не похоже, что я могу вызвать IComparer из синтаксиса запроса.

1 ответ

Решение

Вы правы, вы не можете использовать эту перегрузку из выражения запроса orderby пункт. К счастью, ваш запрос довольно прост, поэтому вы можете просто использовать:

// Have a using directive for System.Xml.Linq - it'll make everything simpler!
XDocument output = new XDocument(
    new XElement("xml",
        input.Root
             .Elements("training")
             .OrderBy(node => node.Attribute("order)".Value, comparer)));
Другие вопросы по тегам