首页 > 解决方案 > 获取前 5 个频繁值及其总数 Linq-to-Sql

问题描述

我正在使用这个 Linq to sql 来获取出现最多的记录。

List<int> result;
result = await context.InvoiceItems.GroupBy(q => q.ProductID)
        .OrderByDescending(gp => gp.Count())
        .Take(5)
        .Select(g => g.Key).ToListAsync();  

并获取 int 类型值。但我也想获得每个值出现的总次数。就像这个 SQL 查询正在返回。

select productID, Count(*) AS value_occurrence from InvoiceItems group by productID  

看这张桌子图片

SQL 结果

标签: c#sqllinq-to-sql

解决方案


您需要分组ProductID,然后将结果投影到Sample类中,一个属性为.Key,第二个属性为.Count()

List<Sample> result = await context.InvoiceItems.GroupBy(q => q.ProductID)
                  .OrderByDescending(gp => gp.Count())
                  .Take(5)
                  .Select(g => new Sample { ProductID = g.Key, Value_Occurence = g.Count() }).ToListAsync();

result.ForEach(x => Console.WriteLine($"ID: {x.ProductID}, \t Value_Occurence: {x.Value_Occurence}"));

您可以将结果投影到下面的示例类中。

class Sample
{
    public int ProductID { get; set; }
    public int Value_Occurence { get; set; }
}

输出:每个productID只输入一个InvoiceItem

在此处输入图像描述


推荐阅读