-4

我需要在 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 获得这个?

4

3 回答 3

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 
于 2013-08-12T15:14:35.520 回答
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)
                                    }));
于 2013-08-12T15:17:08.887 回答
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);
于 2013-08-12T15:17:41.263 回答