LINQ Запрос для подсчета по отдельной категории / подкатегории - PullRequest
3 голосов
/ 21 февраля 2011

У меня есть таблица, сгенерированная из запроса LINQ для таблицы данных, которая имеет поля подкатегорий и категорий:

Name...........Category.........Subcategory  
Kiss...........Rock.............Glam Rock  
Metallica......Rock.............Hard Rock  
Bon Jovi.......Rock.............Soft Rock  
Slade..........Rock.............Glam Rock  
Meatloaf.......Rock.............Soft Rock  
Wilee..........Dance............Grime  
Mgmt...........Dance............Nu Rave  
Dizee..........Dance............Grime  

Запрос LINQ, который я использую для создания этой таблицы:

var qCategory = from c in dtCategory.AsEnumerable()
            select new {
                Artist = c.Field<string>("Artist"),
                Category = c.Field<string>("Category"),
                Subcategory = c.Field<string>("Subcategory")
             };

Теперь я хочу получить количество каждой пары категория / подкатегория.например, для приведенного выше примера я хочу вернуть:

Category............Subcategory.......Count  
Rock................Glam Rock.........2  
Rock................Soft  Rock........2   
Rock................Hard Rock.........1  
Dance...............Grime.............2  
Dance...............Nu Rave...........1  

Как я могу добиться этого?

Ответы [ 2 ]

4 голосов
/ 21 февраля 2011

Попробуйте:

var counts = from artist in qCategory
             group artist by new { artist.Category, artist.Subcategory } 
                          into g
             select new { 
                           g.Key.Category,
                           g.Key.Subcategory, 
                           Count = g.Count() 
                        };

Если вы хотите, чтобы у подкатегорий всегда была одна и та же родительская категория (учитывая, что подкатегории называются «глэм-рок» и т. Д., Я предполагаю, что это действительно так), выполните:

var counts = from artist in qCategory
             group artist by artist.Subcategory into g
             select new {
                           Category = g.Select(a => a.Category)
                                       .Distinct()
                                       .Single(),
                           Subcategory = g.Key,
                           Count = g.Count()
                        };

Это вызовет исключение, если «Рэп Рок» окажется в подкатегории «Рэп» и «Рок».

2 голосов
/ 21 февраля 2011
qCategory.
  GroupBy(item => new {Category = item.Category, Subcategory = item.Subcategory}).
  Select(group => new {Category = group.Key.Category, Subcategory = group.Key.Subcategory, Count = group.Count()})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...