我需要在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得到这个?
答案 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);