计数、排序 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 个值的主要内容,如果未能解决你的问题,请参考以下文章
asp.net VS2008 GridView 里面怎么排序
使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数