c#LINQ为平局决胜创建查询以计算位置

时间:2018-06-22 03:00:43

标签: c# linq model-view-controller

我当前的输出如下:

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();

我如何遍历被绑的位置并根据时间戳对排名位置重新编号?

1 个答案:

答案 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,这样就不会增加位置值。