根据条件分组在linq中排名?

时间:2013-08-12 15:04:47

标签: c# linq

我需要在Linq上排名。

class test
{
    public int Id { get; set; }
    public string  Destination { get; set; }
}

我的数据如下:

ID          Destination
1           Miami
2           Miami
3           Boston
4           Atlanta 

我想要的是这个:

ID          Destination        Value
1           Miami              Miami1
2           Miami              Miami2
3           Boston             Boston1
4           Atlanta            Atlanta1

如何通过Linq得到这个?

3 个答案:

答案 0 :(得分:5)

试试这个:

list.GroupBy(l => l.Destination)
    .SelectMany(g => g.Select((x,i) => new {
                                            x.Id, 
                                            x.Destination,  
                                            Value = x.Destination + (i+1)
                                           }));

i中的SelectMany会为您提供每个组中项目的索引。只需添加1即可获得排名。

结果:

Id destination   Value 
1  Miami         Miami1 
2  Miami         Miami2 
3  Boston        Boston1 
4  Atlanta       Atlanta1 

答案 1 :(得分:1)

以下是如何计算群组内的排名:

var result =
    items.GroupBy(d => d.destination)
            .SelectMany(g =>
                        g.Select(d =>
                                new
                                    {
                                        d.Id,
                                        d.destination,
                                        Value = d.destination +
                                                (g.Count(x => x.Id < d.Id) + 1)
                                    }));

答案 2 :(得分:1)

var result = list.GroupBy(x=>x.Destination)
                 .Select(g => g.Select((x,i) => 
                                   new {
                                        ID = x.ID,
                                        Destination = x.Destination,
                                        Value = x.Destination + (i + 1)                                             
                                       }))
                 .SelectMany(x=>x);