构造linq查询以获取关联

时间:2014-05-17 14:52:29

标签: c# linq linq-to-sql repository-pattern

我有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

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您正在寻找关联计数,这是一个聚合函数,您可以直接对产品类别中的分组选择使用。

var results = ProductCategory
    .GroupBy(g => g.CategoryId)
    .Select(new { 
        Category = g.Key, 
        Associations = g.Count() 
        })
    .ToList();
相关问题