Ваша структура XML неудачна, поскольку она использует элемент Product для трех уровней иерархии. У вас есть другие элементы, похожие на "бытовой"?
Предполагая, что мы хотим использовать только бытовые, вы можете использовать:
Количество предметов в каждом из дешевых / дорогих
xe.Element("Product") // Select the Product desc="household" element
.Elements() // Select the elements below it
.Select(element => new { Name=(string) element.Attribute("desc"),
Count=element.Elements().Count() });
Список всех категорий
xe.Descendants() // Select all descendant elements
.Attributes() // All attributes from all elements
// Limit it to "category" elements
.Where(attr => attr.Name == "category")
// Select the value
.Select(attr => attr.Value)
// Remove duplicates
.Distinct();
Чтобы отсортировать это, просто используйте .OrderBy(x => x)
в конце.
Выбор «дорогих» продуктов
xe.Descendants() // Select all elements
// Only consider those with a "Costly" description
.Where(element => (string) element.Attribute("desc") == "Costly")
// Select the subelements of that element, and flatten the result
.SelectMany(element => element.Elements());