使用Linq-Query设置值?

时间:2009-11-20 15:22:31

标签: c# .net linq

在我的应用程序中,我有一个项目列表,我需要按价格排序并为每个项目设置排名/位置索引。我需要存储排名,因为之后价格可能会发生变化。目前我这样做:

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++;
     }
}

有更短的方法吗?

3 个答案:

答案 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上操作会更好。