我有一个由邮编和totalCost两个项组成的列表。我想从此列表中获取总成本最高的前5项。我试过了
var top5 = list.OrderByDescending(a=> a.TotalCost).Take(5);
也
Thread.sleep(5000);
这些查询都没有在名为top5的var中生成任何内容。请问这个语法有什么问题?
答案 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();