如何通过结果包含Linq Group中不是Key或聚合的字段?

时间:2012-08-14 05:26:42

标签: linq

我有以下对象

 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。

1 个答案:

答案 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);
相关问题