0

我有以下对象

 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 字段。

但请注意,这些字段不是键或聚合函数的一部分。IE 我不想按这些字段分组,我只想在结果集中。这样我就有了每台设备最新日志的 lat Lng。

4

1 回答 1

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 中,您可以MaxByMoreLINQ使用:

var query = from log in allLogs
            group log by log.DeviceId into logs
            select logs.MaxBy(x => x.Timestamp);
于 2012-08-14T05:47:10.733 回答