我有2个表,Category和ProductCategory。
产品可以有多个类别:
类别ID 类别名称
1
电子
2
E-读卡器
3
平板
类别ID 产品编号
1
100
2
100
3
100
3
500
1
800
我为Category设置了一个存储库,该存储库具有ProductCategory的导航属性。 我正在尝试构建一个LINQ查询,它接受一个CategoryId并返回所有的列表 相关类别+相关联的次数(关联是通过产品)。
例如,如果我们从上面的例子中选择CategoryId 1(Electronics): 我们可以看到1与ProductId 100和800相关联,但同时ProductId 100链接到Category 2& 3.我们还看到CategoryId 2与ProductId 100链接一次,CategoryId 3与ProductIds 100和500链接2次。
我的预期结果集将是(不包括传入的1的CategoryId)
类别ID 协会(S)
2
1
3
2
但我的问题是如果我做这样的事情:
var resultSet = repository.Query() .Include(pc => pc.ProductCategory) .Where(c => c.CategoryId == 1)。ToList();
resultSet仅限于
类别ID 产品编号
1
100
1
800
但是使用上面的LINQ我想将resultSet整形为:
类别ID 协会(S)
2
1
3
2
有什么想法吗?
答案 0 :(得分:3)
您正在寻找关联计数,这是一个聚合函数,您可以直接对产品类别中的分组选择使用。
var results = ProductCategory
.GroupBy(g => g.CategoryId)
.Select(new {
Category = g.Key,
Associations = g.Count()
})
.ToList();