[英]LINQ Query to count by distinct category / subcategory
I have a table, generated from a LINQ query on a datatable, which has subcategory and category fields: 我有一个表,从一个数据表的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
The LINQ query I am using to generate this table is: 我用来生成这个表的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")
};
Now I want to get a count of each category/subcategory pair. 现在我想得到每个类别/子类别对的计数。 eg for the above example I want to return: 例如,对于上面的例子,我想返回:
Category............Subcategory.......Count Rock................Glam Rock.........2 Rock................Soft Rock........2 Rock................Hard Rock.........1 Dance...............Grime.............2 Dance...............Nu Rave...........1
How can I acheive this? 我该如何实现这一目标?
Try: 尝试:
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()
};
If you want to enforce that subcategories always have the same parent category (given that the sub-categories are named "Glam Rock" etc., I assume that this is in fact the case), do: 如果你想强制执行那些子类别总是有相同的父类别(假设子类别被命名为“Glam Rock”等,我认为这实际上就是这种情况),做:
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()
};
This will throw an exception if "Rap Rock" turns up as a subcategory of both "Rap" and "Rock". 如果“Rap Rock”作为“Rap”和“Rock”的子类别出现,这将引发异常。
qCategory.
GroupBy(item => new {Category = item.Category, Subcategory = item.Subcategory}).
Select(group => new {Category = group.Key.Category, Subcategory = group.Key.Subcategory, Count = group.Count()})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.