2017-10-19 71 views
0

我有以下表格,我可以为单个名称指定多个时间戳记。 我想获得最大时间戳的名称(不同)。LINQ从组中选择最大日期的列

Id Name TimeStamp 
66 Name1 19/10/2017 
67 Name1 20/10/2017 
68 Name1 21/10/2017 
69 Name2 19/10/2017 
70 Name2 20/10/2017 
71 Name2 21/10/2017 
72 Name2 22/10/2017 
73 Name3 19/10/2017 
74 Name3 20/10/2017 
75 Name3 21/10/2017 

我可以做group by,现在需要从该组中选择具有最大值的元素。

var tempResult = data.GroupBy(x => x.Name); 

我试着这样做,螺母只选定的日期时间,但我需要的完整资料:

foreach (var item in tempResult) 
      { 
       var maxItem = item.Max(x=>x.StartTime); 

      } 

回答

3
var result = from d in data 
    group d by d.Name into g 
    select new { Name = g.Key, MaxDate = g.Max(s => s.StartTime) } 

或者,如果你不喜欢,然后查询语法:

data.GroupBy(i => i.Name).Select(g => new 
{ 
    Name = g.Key, 
    MaxDate = g.Max(row => row.StartTime) 
}); 
+1

看起来坚实清洁 –

1

@ CodingYoshi的答案就足够了,如果你只需要Name和TimeStamp。 如果你想选择所有其他属性(完整对象),你可以使用它。

var tempResult = data.GroupBy(x => x.Name) 
     .Select(g => g.OrderByDescending(y => y.TimeStamp).FirstOrDefault()); 

,如果你喜欢的查询形式那么这

var tempResult2 = from x in data 
         group x by x.Name into g 
         select g.OrderByDescending(y => y.TimeStamp).FirstOrDefault(); 

在这里,你的情况,你可以访问所有属性(包括ID)。

相关问题