从基于最高值的列表中获取前5名

时间:2017-05-18 10:10:24

标签: c# linq

我有一个由邮编和totalCost两个项组成的列表。我想从此列表中获取总成本最高的前5项。我试过了

var top5 = list.OrderByDescending(a=> a.TotalCost).Take(5);

Thread.sleep(5000);

这些查询都没有在名为top5的var中生成任何内容。请问这个语法有什么问题?

4 个答案:

答案 0 :(得分:1)

 var i = sums.OrderByDescending(x => x.TotalCost).Take(5).ToList();

    foreach (var postCodeSum in i)
    {
        Console.WriteLine(postCodeSum.TotalCost);
    }
编辑:没有意识到你想要最高价值,编辑代码;我已经运行了代码,它应该可以正常工作。

答案 1 :(得分:1)

可以使用LINQ:

.OrderByDescending(x => x.TotalCost).Take(5).ToList();

问题是您忘记了.ToList()。

答案 2 :(得分:0)

提供的查询(OrderByDescending后跟Take())应该有效,确保类中的property / fileds是公共的。我正在根据评论回答

  

PostCodeSum类只包含私有十进制_totalCost; private string _postCode; - 长颈鹿4米

如果你提到它是私有的,你肯定会在查询中的a.TotalCost处遇到编译错误。如果属性可访问,则意味着以下代码将起作用:

var top5 = postCodeSumTotals.OrderByDescending(a => a.TotalCost).Take(5); 

看看这个Working Example

答案 3 :(得分:0)

通过将结果放入列表来解决它。不知道为什么其他方式不起作用。

List<PostCodeSum> postCodeSumTotalsFinal = postCodeSumTotals.OrderByDescending(o => o.TotalCost).Take(5).ToList();