首页 > 解决方案 > 计数、排序 desc 并选择 ASP.NET 的前 4 个值

问题描述

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

这是sql中的结果

在此处输入图像描述

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

在此处输入图像描述

我曾尝试在视图中使用 LINQ 和 var 但无法获得它。我看到了这个并尝试了以下但不太明白

员工模型

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

标签: sqlasp.netlinqrazorrazor-pages

解决方案


你可以做以下事情

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

示例代码。请参阅此链接以获取工作代码

// 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; }
}

推荐阅读