2017-10-19 1 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 

그룹별로 수행 할 수 있습니다. 이제 해당 그룹의 최대 값을 갖는 요소를 선택해야합니다. 나는이 일을 시도

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의 답변은 이름과 타임 스탬프 만 있으면 충분합니다. 다른 모든 속성 (전체 개체)을 선택하려면이 속성을 사용할 수 있습니다.

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 포함) 모든 속성에 액세스 할 수 있습니다.

관련 문제