Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 以最早的时间戳获得最高分数的排名_Linq - Fatal编程技术网

Linq 以最早的时间戳获得最高分数的排名

Linq 以最早的时间戳获得最高分数的排名,linq,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:

我有以下记录:

   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查询是什么

目前,你得到的是一个人的最高分数和最低日期,但不一定是相同的记录

您需要将最小日期限制为仅查看具有所需最大分数的记录。。。这不是最干净的方法,但会起作用(我不擅长Linq语法,更喜欢lambda)


试试简单的吧

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

要整理它,您可以使用
let
语句将max score放入一个变量并重用它。
var max = Submissions.Max(m => m.score);
var result = Submissions.Where(s => s.score == max).OrderBy(s => s.Date);