我有以下对象
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我不想按照这些字段进行分组,我只想在结果集中。这样我就可以获得每个设备最新日志的lat Lng。
答案 0 :(得分:1)
这可以在LINQ to Objects中使用 - 我不知道LINQ to SQL等:
var query = from log in allLogs
group log by log.DeviceId into logs
select logs.OrderByDescending(x => x.Timestamp).First();
换句话说,对每个组进行排序,并采用最新的。
或者,肯定仅在LINQ to Objects中,您可以使用MaxBy
中的MoreLINQ:
var query = from log in allLogs
group log by log.DeviceId into logs
select logs.MaxBy(x => x.Timestamp);