gpt4 book ai didi

c# - Linq for rank() 在 SQL Server 中等效 -

转载 作者:行者123 更新时间:2023-11-30 17:41:05 24 4
gpt4 key购买 nike

如何在 SQL 中使用 Linq 等于 rank() 对我的列表进行排序?

例如排名是我的List<Player>

class Player
{
public int Id;
public int RankNumber;
public int Points;
public int Name;

}

原榜单:

RankNumber   Points  Name    Id
1 100 James 01
2 80 Mike 50
3 80 Jess 22
4 50 Jack 11
5 50 Paul 03
6 10 Monik 13

我需要这个等级:

RankNumber   Points  Name    Id
1 100 James 01
2 80 Mike 50
2 80 Jess 22
4 50 Jack 11
4 50 Paul 03
6 10 Monik 13

最佳答案

我认为没有将其直接转换为 Linq to SQL 的好方法,但您可以这样做:

var rankedPlayers = players
.OrderByDescending(p => p.Points)
.Select((p, r) => new Player
{
Id = p.Id,
RankNumber = players.Where(pl => pl.Points > p.Points).Count() + 1,
Points = p.Points,
Name = p.Name
});

它会为您提供正确的输出,但会可怕且低效地转换为 SQL。所以我建议在创建排名之前将数据具体化到列表中的这种修改:

var rankedPlayers = players
.OrderByDescending(p => p.Points)
.ToList() //<--- Add this
.Select((p, r) => new Player
{
Id = p.Id,
RankNumber = players.Where(pl => pl.Points > p.Points).Count() + 1,
Points = p.Points,
Name = p.Name
});

关于c# - Linq for rank() 在 SQL Server 中等效 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com