Entity Framework:제일 최근에 갱신된 레코드를 추출하기
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();
참고 사이트
Entity Framework - select group by, select max date
Entity Framework creating IQueryable of the most recent