2014-09-12 2 views
1

사용자가 List<Call> CallsToMake 일 때마다 모든 호출에 DateTime TimeStamp 속성이 있습니다.LINQ 쿼리로 최소 datetime 행 가져 오기

가장 빠른 (분) 시간 인 Call을 얻으려고합니다. 나는 최소 TimeStamp을 얻는 방법을 보여주는 예제를 보았지만, 을 최소 TimeStamp과 함께 얻는 방법을 모르겠습니다. 첫 번째 TimeStamp으로 user.CallsToMake.Where(call => call.TimeStamp)

+1

[Enumerable.OrderBy] (http://msdn.microsoft.com/en-us/library/vstudio/bb534966%28v=vs.100%29.aspx) –

+1

@h uMptyduMpty : 최소값으로 항목을 가져 오기 위해 전체 모음을 정렬 할 필요가 없습니다. 한 번에 할 수 있습니다. –

+1

@JonSkeet : 물론, 내 마음에 오지 않았다. 감사! –

답변

3

정렬 통화를 선택 :

여기에 추가 모르는 당신은 또한 정렬하지 않고 원하는 값을 얻을 수 Aggregate을 사용할 수 있습니다

Call firstCall = user.CallsToMake.OrderBy(i => i.TimeStamp).FirstOrDefault(); 

:

Call firstCall = user 
       .CallsToMake 
       .Aggregate((min, current) => 
          (current.TimeStamp < min.TimeStamp ? current : min) 
       ); 
+2

나는 orderBy를 피하려고 노력했다. 왜냐하면 나는 그것이 시간이 걸릴 수있는 우선 분류를 호출하는 것이 두려웠 기 때문이다. 정렬은 nlogn이고, min은 n입니다. – Yoda

+2

정렬을 사용하지 않고 O (n) 복잡도에서 작동하는 솔루션을 추가했습니다. – Zbigniew