2014-09-12 79 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