计数、排序 desc 并选择 ASP.NET 的前 4 个值

Posted

技术标签:

【中文标题】计数、排序 desc 并选择 ASP.NET 的前 4 个值【英文标题】:Count, order desc and select top 4 values for ASP.NET 【发布时间】:2021-09-14 14:11:42 【问题描述】:

我正在尝试为我的 .NET 应用程序创建一个显示我的数据库中前 4 个国籍的表。我可以使用this 之后的 SQL 来做到这一点。

这是sql中的结果

但是,我的应用程序需要的是

我曾尝试在视图中使用 LINQ 和 var,但无法获取。我看到this 并尝试关注但不太明白

员工模型

    public class employees
    
       public int eeID  get; set; 
       public string Name  get; set;        
       public string Gender  get; set; 
       public string Nationality  get; set; 
    

【问题讨论】:

这能回答你的问题吗? get top 5 frequent values and their total count Linq-to-Sql 我在我的问题中提到过,我看到了,但我不太明白。试着跟随它。我需要为它创建一个新类吗? 你必须分享你的 asp.net 代码 代码的哪一部分是相关的?我添加了我想要数据的模型 如果您需要帮助,您应该包括您的 linq 代码、您的 dbcontext、您的 razaor 页面 【参考方案1】:

你可以做以下事情

    存储按计数排序的分组民族 获得最佳结果,使用Enumerable.Take 获取不应该包括最高记录的其他民族的计数,为此,您可以使用Enumerable.Skip 第 2 点和第 3 点的连接结果。 将最终输出传递给视图。

示例代码。工作代码请参考link

// Your Logic
var topRecordsCount = 4;
var groupedResult = list
                    .GroupBy(x => x.Nationality)
                    .OrderByDescending(x => x.Count());
    
var topRecords = groupedResult
                .Take(topRecordsCount)
                .Select(x => new FinalResult Nationality = x.Key, Total = x.Count()).ToList();
var othersCount = groupedResult.Skip(topRecordsCount).Select(x => x.Count()).Sum();
var othersRecord = new FinalResult  Nationality = "Others", Total = othersCount;

topRecords.Add(othersRecord);
foreach(var top in topRecords)
    Console.WriteLine(top.Nationality + " - " + top.Total);

// model to store the final output
public class FinalResult 
     public string Nationality  get; set; 
     public int Total  get; set; 

【讨论】:

以上是关于计数、排序 desc 并选择 ASP.NET 的前 4 个值的主要内容,如果未能解决你的问题,请参考以下文章

来自多个表的前 10 个不同值的问题

SQL - 选择按多个字段分组的前 n 个,按计数排序

asp.net VS2008 GridView 里面怎么排序

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数

Pyspark - 使用 count() 分组数据并可以排序?

如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录