Entity Framework:最新の日付のレコードを抽出
DBサンプル
tb1
Id | DetailId | LastUpdatedAt |
---|---|---|
1 | 101 | 2017-02-01 01:00:00 |
2 | 101 | 2017-02-01 10:00:00 |
3 | 101 | 2017-02-02 01:00:00 |
4 | 102 | 2017-02-01 01:00:00 |
5 | 102 | 2017-02-02 01:00:00 |
tb2
DetailId | Name |
---|---|
101 | Name1 |
102 | Name2 |
例1
tb1から同じDetailIdを持つ複数のレコードの中で、一番最新の日付のものを抽出する
var list = (from t in db.tb1 group t by t.DetailId into g select g.OrderByDescending(e => e.LastUpdatedAt).FirstOrDefault() into p select new { Id = p.Id, DetailId = p.DetailId, LastUpdatedAt = p.LastUpdatedAt }).ToList();
例2
tb1から同じDetailIdを持つ複数のレコードの中で、一番最新の日付のもの、且つステータスが10であるもので、tb2と紐付いてるNameも抽出する
var list = (from t in db.tb1 group t by t.OrderDetailId into g select g.OrderByDescending(e => e.LastUpdatedAt).FirstOrDefault() into p join tt in db.tb2 on p.DetailId equals tt.DetailId where p.Status == 10 select new { Id = p.Id, DetailId = p.DetailId, Name = tt.Name, LastUpdatedAt = p.LastUpdatedAt }).ToList();