在我的应用程序中,我有一个项目列表,我需要按价格排序并为每个项目设置排名/位置索引。我需要存储排名,因为之后价格可能会发生变化。目前我这样做:
var sortedlistKFZ = from res in listKFZ orderby res.Price select res;
if (sortedlistKFZ.Any())
{
int rankPosition = 1;
foreach (Result kfz in sortedlistKFZ)
{
kfz.MesaAdvertNumber = rankPosition;
rankPosition++;
}
}
有更短的方法吗?
答案 0 :(得分:9)
这可能会有效吗?
int rankPosition = 1;
var sortedListKFZ = listKFZ.OrderBy(r => r.Price).Select(r => {
r.MesaAdvertNumber = ++rankPosition;
return r;
});
答案 1 :(得分:3)
您可以使用let
关键字来完成此操作。这应该有用......
Int32[] numbers = new Int32[] { 3, 6, 4, 7, 2, 8, 9, 1, 2, 9, 4 };
int count = 1;
var ranked =
from n in numbers
let x = count++
select new {
Rank = x,
Number = n
};
答案 2 :(得分:1)
最简单的就是
(from res in listKFZ orderby res.Price select res).ToList().ForEach(...)
当然你可以为IEnumerable编写自己的ForEach扩展,但我记得我对它有副作用。在List上操作会更好。