我当前的输出如下:
ContestId | Points | Position | Timestamp
1 90 1 2018-06-18 12:00:00
1 80 2 2018-06-18 12:15:00
1 75 3 2018-06-18 12:30:00
1 75 3 2018-06-18 12:25:00
1 72 5 2018-06-18 12:40:00
抢七是时间戳。
使用c#MVC从SQL数据库检索数据。我希望输出看起来像:
ContestId | Points | Position | Timestamp
1 90 1 2018-06-18 12:00:00
1 80 2 2018-06-18 12:15:00
1 75 3 2018-06-18 12:25:00
1 75 4 2018-06-18 12:30:00
1 72 5 2018-06-18 12:40:00
这是模型:
public class ContestResult
{
[Key]
public int Id { get; set; }
public int ContestId { get; set; }
public int Points { get; set; }
public int Position { get; set; }
public DateTime TimeStamp { get; set; }
}
这是生成输出的查询:
pointScores = contestResults.Where(a => a.contestId == contest.id)
.Select((v, i) => new ContestResult
{
ContestId = v.ContestId,
Points = v.Points,
TimeStamp = v.TimeStamp,
Position = db.ContestResults
.Where(a => a.ContestId == contest.id)
.Count(p => p.Points > v.Points) + 1
}).ToList();
我如何遍历被绑的位置并根据时间戳对排名位置重新编号?
答案 0 :(得分:0)
重新研究后,我在Count方法中添加了其他条件。
pointScores = contestResults.Where(a => a.contestId == contest.id)
.Select((v, i) => new ContestResult
{
ContestId = v.ContestId,
Points = v.Points,
TimeStamp = v.TimeStamp,
Position = db.ContestResults
.Where(a => a.ContestId == contest.id)
.Count(p => p.Points > v.Points ||
(p.Points == v.Points && p.TimeStamp < v.TimeStamp)) + 1
}).ToList();
我唯一遇到的问题是,如果我添加可用于验证条件的其他字段,则该字段始终计算为False,这样就不会增加位置值。