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のみが含まれていることを除いて、うまく機能します。ログのLatフィールドとLngフィールドも含めたいと思います。

ただし、これらのフィールドはキーまたは集計関数の一部ではないことに注意してください。IEこれらのフィールドでグループ化したくないので、結果セットに含めたいだけです。これで、デバイスごとの最新のログのlatLngを取得できます。

4

1 に答える 1

1

これはLINQtoObjectsで機能します-LINQtoSQLなどについてはわかりません。

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

つまり、各グループを並べ替えて、最新のものを取得します。

または、間違いなくLINQ to Objectsでのみ、 MoreLINQMaxByから使用できます。

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 に答える