2014-09-12 80 views
1

用戶有一個List<Call> CallsToMake每個調用都有一個屬性DateTime TimeStamp通過LINQ查詢獲取具有最短日期時間的行

我嘗試獲得具有最早(最小)時間的Call。我見過的例子顯示如何獲得最小TimeStamp,但我不知道如何獲得最小TimeStampCall

我不知道在這裏補充:由TimeStampuser.CallsToMake.Where(call => call.TimeStamp)

+1

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

+1

@h uMptyduMpty:沒有必要對整個集合進行排序,只是爲了獲得具有最小值的項目。你可以一次完成。 – 2014-09-12 15:36:21

+1

@JonSkeet:當然,我沒有想到。謝謝! – 2014-09-12 15:37:12

回答

3

排序調用和選擇第一個:

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

您還可以使用Aggregate,從而獲得所需的值不排序:

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

我試圖避免orderBy,因爲我擔心它會首先調用排序,這可能需要時間。排序是nlogn,發現min是n。 – Yoda 2014-09-12 15:35:34

+2

我已經添加了不使用排序並且工作在O(n)複雜度的解決方案。 – Zbigniew 2014-09-12 15:42:33