Linq:对列表进行分组,对其进行排序并获得最高x值?

And*_*ite 4 c# linq group-by sql-order-by

我有一个清单:

Name  Country    Value
John  Ireland    100
Mary  UK         200
Peter Germany    300
Bob   UK         100
Pat   France     400

我需要按国家/地区对列表进行分组,然后按总和值DESC排序,然后取前X值

例如List.TopX(3)将返回

France  400
UK      300
Germany 300

Str*_*ior 12

当我周末回答时,我没有时间对此作出充分评论,但我想说几件事.首先,我同意评论者的观点,这听起来很像家庭作业.如果你曾尝试过某些东西并遇到麻烦,我希望能够听到你的问题所在.Stack Overflow是关于专业人员在尝试所有事情时帮助彼此解决特定问题并且无法完全正确解决问题.这个问题有一个微不足道的回应(对于那些花时间阅读LINQ的人来说).我故意使用链式lambda表示法而不是LINQ表达式来指出响应是如何直接翻译问题的:

var results = list.GroupBy(e => e.Country) // group the list by country
    .OrderByDescending(                 // then sort by the summed values DESC
        g => g.Sum(e => e.Value))  
    .Take(n)                            // then take the top X values
    .Select(                            // e.g. List.TopX(3) would return...
        r => new {Country = r.Key, Sum = r.Sum(e => e.Value)}); 
Run Code Online (Sandbox Code Playgroud)

如果我实际上是为了工作,我会使用以下表示法:

var results = from e in list
              group e.Value by e.Country into g
              let sum = g.Sum()
              orderby sum descending
              select new {g.Key, sum};
results = results.Take(n);
Run Code Online (Sandbox Code Playgroud)

  • @Andrew:你是对的.最近我学到了很多关于StackOverflow创建原理的知识,并且我正在努力使自己更接近它们.感谢您的反馈,抱歉是讽刺. (6认同)