我有两张表,一张用于类别,一张用于产品
它们的定义方式如下:
public class Product
{
public int ProductID{get;set;}
public string ProductName{get;set;}
public int CompanyID{get;set;}
public int CategoryID{get;set;}
}
public class Category
{
public int CategoryID{get;set;}
public string CategoryName{get;set;}
}
这两个表通过 CategoryID 连接
我正在尝试获取类别列表,其中包含生产该类别产品的公司数量
因此,这不是按类别计算有多少产品,而是有多少家不同的公司为每个类别生产产品。
我已经尝试过这个查询,但无法得到正确的结果:
var query =
from c in categories
join p in products on c.CategoryID equals p.CategoryID
group c by new {c.CategoryName,p.CompanyID} into cg
select new
{
CatName = cg.Key.CategoryName,
Count = cg.Count()
};
我在这里准备了一个带有示例数据的 fiddle :
https://dotnetfiddle.net/WHwNFk
fiddle 的结果应该是:A=2,B=2,C=2(因此对于每个类别,有 2 个不同的公司生产该类别的产品)
最佳答案
以下 LINQ 语句将为您提供所需的结果。我们首先必须根据类别 ID 将类别加入到产品中,然后按类别 ID 进行分组并选择公司 ID 的不同计数
var query = categories.Join(products,
x => x.CategoryID,
z => z.CategoryID, (x, z) => new
{
Category = x.CategoryName,
Company = z.CompanyID
}).GroupBy(x => x.Category).Select(x => new
{
CatName = x.Key,
Count = x.Distinct().Count()
}).ToList();
输出:
A=2,B=2,C=2
关于c# - LINQ group by 连接并计算同一项目的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54660772/