使用 LINQ 获取前 n 个值,包括重复项

Ari*_*ian 4 c# linq linq-to-entities c#-7.0

请考虑这个列表:

City            Value
---------------------
City1             10
City2             20
City3             30
City4             40
City5             50
City6             60
Run Code Online (Sandbox Code Playgroud)

如果我想获得城市中的前 3 个值,我可以这样写LINQ

MyList.OrderByDescending(o=>o.Value).Take(3);
Run Code Online (Sandbox Code Playgroud)

现在考虑这个列表:

City            Value
---------------------
City1             10
City2             20
City3             30
City4             40
City5             50
City6             60
City7             60
Run Code Online (Sandbox Code Playgroud)

我想要一个返回具有前3 个最高值的所有城市的查询。对于上面的列表,我想要这个结果:

City            Value
---------------------
City7             60
City6             60
City5             50
City4             40
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 14

var result = MyList.GroupBy(o => o.Value)
                   .OrderByDescending(g => g.Key)
                   .Take(3)
                   .SelectMany(g => g)
                   .ToList();
Run Code Online (Sandbox Code Playgroud)

此列表将包含具有前 3 个最高值的所有城市,并按值降序排列。