c# - 获取前 5 个频繁值及其总计数 Linq-to-Sql

标签 c# sql 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 results

最佳答案

您需要按 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

enter image description here

关于c# - 获取前 5 个频繁值及其总计数 Linq-to-Sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904458/

相关文章:

c# - SQL Server 为数据库中的每个表添加一个唯一标识符

c# - C# 如何为类生成 GUID?

mysql - 将列与条件相加并显示在行中

c# - 如何从 LINQ DataContext.SubmitChanges() 获取 TSQL 查询

c# - 将 LINQ-to-SQL 对象转换为模型对象的好方法是什么?

JAVA mySQL JOIN 2个表

mysql - 将所有订单运送到纽约

c# - 如何对使用数据库访问的静态方法进行单元测试?

c# - 使用 Linq2Sql 的最佳方式?

c# - 有时可以获取文本但有时显示 "Unable to find element with selector"