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)