获得最高分的排名和最早的时间戳

时间:2010-12-24 05:36:20

标签: linq

我有以下记录:

   name   score Date
   Billy  32470 12/18/2010 7:26:35 PM
   Sally  1100  12/19/2010 12:00:00 AM
   Kitty  1111  12/21/2010 12:00:00 AM
   Sally  330   12/21/2010 8:23:34 PM
   Daisy  32460 12/22/2010 3:10:09 PM
   Sally  32460 12/23/2010 4:51:11 PM
   Kitty  32440 12/24/2010 12:00:27 PM
   Billy  32460 12/24/2010 12:11:36 PM

我希望使用LINQ获得最高分的排行榜和最早的时间戳。 在这种情况下,正确的是

rank name 
  1  Billy 
  2  Daisy 
  3  Sally 

我使用以下查询:

var result = 
(from s in Submissions
group s by s.name into g
orderby g.Max(q => q.Score) descending,g.Min(q => q.Date) ascending
select new ScoreRecord
{
name = g.Key
Score = g.Max(q => q.Score)
}).Take(3).ToList();

我得到以下错误结果:

rank name 
  1  Billy 
  2  Sally
  3  Daisy

在这种情况下,正确的linq查询是什么?

2 个答案:

答案 0 :(得分:1)

目前你获得了一个人的最高分和最低分数,但不一定是同一记录。

您需要将最小日期限制为只查看那些具有所需最高分数的记录...这不是最干净的方法但是可行(我不擅长Linq语法,更喜欢拉姆达)

var result =  
(from s in Submissions 
group s by s.name into g 
orderby g.Max(q => q.Score) descending, 
    g.Where(i => i.Score == g.Max(q => q.Score)).Min(q => q.Date) ascending 
select new ScoreRecord 
{ 
name = g.Key 
Score = g.Max(q => q.Score) 
}).Take(3).ToList(); 

答案 1 :(得分:-1)

尝试一些简单的事情

var max = Submissions.Max(m => m.score);
var result = Submissions.Where(s => s.score == max).OrderBy(s => s.Date);