Entity Framework에서 제일 최근에 갱신된 레코드를 추출하는 방법을 정리해 보았습니다.
DB샘플
tb1
Id | DetailId | LastUpdatedAt |
1 | 101 | 2017-02-01 01:00:00 |
2 | 102 | 2017-02-01 10:00:00 |
3 | 103 | 2017-02-02 01:00:00 |
4 | 104 | 2017-02-01 01:00:00 |
5 | 105 | 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
https://stackoverflow.com/questions/19073117/entity-framework-select-group-by-select-max-date
Entity Framework creating IQueryable of the most recent
https://stackoverflow.com/questions/1273437/entity-framework-creating-iqueryable-of-the-most-recent
'개발 > Database' 카테고리의 다른 글
EntityFramework : ConnectionStrings내의 특수문자 처리 (0) | 2019.01.28 |
---|---|
Entity Framework에서 MySQL 접속하기 -2 (0) | 2019.01.23 |
Entity Framework에서 MySQL 접속하기 (0) | 2019.01.23 |
Entity Framework에서 SQL문을 직접 실행해서 결과 취득하기 (0) | 2019.01.23 |
Entity Framework에서 tinyint(1)를 sbyte로 인식 시키고 싶을 경우의 해결 방법 (0) | 2019.01.21 |
댓글