Получить максимальное количество повторений из XML с помощью LINQ - PullRequest
2 голосов
/ 17 января 2010

У меня есть XML-файл, содержащий основную информацию о продуктах, со следующей структурой:

 - products
   - Id 
   - Price
   - ManufacturerId

И еще один, содержащий данные о производителях:

 - manufacturers
   - Id
   - Name

Я бы хотел получить 3 лучших производителя с наибольшим количеством продуктов (название производителя и количество продуктов) из файла products.xml с использованием LINQ.

Редактировать: Файл products.xml выглядит следующим образом:

<products>
  <row Id="1" Price="1.00" ManufacturerId="3"/>
  <row Id="1" Price="0.99" ManufacturerId="2"/>
</products>

Поля являются атрибутами как для продуктов, так и для файлов производителей.

1 Ответ

2 голосов
/ 17 января 2010

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

Было бы полезно, если бы вы показали какой-нибудь пример XML - мы не знаем, например, находится ли идентификатор производителя в атрибуте или элементе. Но это было бы что-то вроде:

var top3Ids = products.Elements("row")
                      .GroupBy(x => (string) x.Attribute("ManufacturerId"))
                      .Select(group => new { Id = group.Key,
                                             Count = group.Count() })
                      .OrderByDescending(x => x.Count)
                      .Select(x => x.Id)
                      .Take(3)
                      .ToList();

var top3 = from element in manufacturers.Elements("row")
           where top3Ids.Contains((string) element.Attribute("Id"))
           select (string) element.Attribute("Name");
...