2012-08-14 32 views
0

我有以下對象如何在結果中包含Linq Group中不是鍵或集合的字段?

public partial class Log 
{ 
    public System.Guid Id { get; set; } 
    public double Lat { get; set; } 
    public double Lng { get; set; } 
    public System.DateTime TimeStamp { get; set; } 
    public int DeviceId { get; set; } 
} 

而且我想獲得最新的每臺設備的日誌。所以我有這個

from log in allLogs 
        group log by log.DeviceId 
        into l 
        select new {DeviceId = l.Key, TimeStamp = l.Max(s => s.TimeStamp)}; 

這很好,除了它只包括deviceId和TimeStamp。我也想從Log中包含Lat和Lng字段。

但請注意這些字段不是鍵或聚合函數的一部分。 I.E我不想在這些領域進行分組,我只想在結果集中進行分組。這樣我就可以獲得每個設備最近日誌的緯度。

回答

1

這將在LINQ工作對象 - 我不知道的LINQ to SQL等:

var query = from log in allLogs 
      group log by log.DeviceId into logs 
      select logs.OrderByDescending(x => x.Timestamp).First(); 

換句話說,排序各組,並採取最新的。

另外,絕對只有在LINQ到對象,你可以使用MaxByMoreLINQ

var query = from log in allLogs 
      group log by log.DeviceId into logs 
      select logs.MaxBy(x => x.Timestamp); 
相關問題