gpt4 book ai didi

entity-framework - 如何使用 Entity Framework 通过 LINQ 获取行号?

转载 作者:行者123 更新时间:2023-12-02 07:48:58 25 4
gpt4 key购买 nike

希望有人能帮助我,因为我有点陷入困境。

我正在为一款游戏在 hiscore 数据库前构建一项服务。

数据库有以下两个表:

CREATE TABLE [dbo].[PB_HiscoreEntry] (
[Id] UNIQUEIDENTIFIER NOT NULL,
[PlayerId] UNIQUEIDENTIFIER NOT NULL,
[Score] INT NOT NULL,
[DateCreated] DATETIME NOT NULL
);


CREATE TABLE [dbo].[PB_Player] (
[Id] UNIQUEIDENTIFIER NOT NULL,
[UniquePlayerId] NCHAR (32) NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[DateCreated] DATETIME NOT NULL
);

这个想法当然是每个玩家只在数据库中存在一次,并让他们拥有多个他的分数条目。这个表 PB_HiscoreEntry 将有很多分数,但是通过执行简单的 OrderBy 降序,我可以创建一个真正的 hiscore 列表,其中分数最高的位于顶部,分数最低的位于底部。我的问题是我的数据库不知道分数与其他分数相比的实际排名。这是我应该像执行上述 OrderBy 查询一样执行的操作。

这里有一些代码可以帮助说明我想要归档的内容:

var q = (
from he in entities.PB_HiscoreEntry
orderby he.Score descending
select new HiscoreItem()
{
UserId = he.PB_Player.UniquePlayerId,
Username = he.PB_Player.Name,
Score = he.Score,
//Put in the rank, relative to the other entires here
Rank = 1
});

HiscoreItem,只是我自己的 DTO,我需要通过网络发送。

那么有人知道我该如何做到这一点,还是我走在完全错误的道路上?

最佳答案

您的方向是正确的,您只需使用 Queryable.Select需要额外索引的重载。看看这个:

var entries =
from entry in entities.PB_HiscoreEntry
orderby entry.Score descending
select entry;

// Note the (entry, index) lambda here.
var hiscores = entries.Select((entry, index) => new HiscoreItem()
{
UserId = entry.PB_Player.UniquePlayerId,
Username = entry.PB_Player.Name,
Score = entry.Score,
Rank = index + 1
});

我不是 100% 确定 Entity Framework 是否知道如何使用 Select<TSource, TResult>(this IQueryable<TSource>, Expression<Func<TSource, int, TResult>>)重载。如果是这种情况,只需使用 static Enumerable 的等效方法即可类:

// Note the .AsEnumerable() here.
var hiscores = entries.AsEnumerable()
.Select((entry, index) => new HiscoreItem()
{
UserId = entry.PB_Player.UniquePlayerId,
Username = entry.PB_Player.Name,
Score = entry.Score,
Rank = index + 1
});

我希望这会有所帮助。

关于entity-framework - 如何使用 Entity Framework 通过 LINQ 获取行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4827370/

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