다음을 LINQ 문으로 변환하는 작업을 수행 할 수 있습니까?SQL 문을 LINQ-To-SQL로 변환
SELECT reports.* FROM [dbo].[ReportLists] rl
INNER JOIN [dbo].[ReportItems] ri ON rl.Id = ri.ReportListId
INNER JOIN [dbo].[Reports] reports ON ri.Id = reports.ReportItemId
WHERE
reports.createdDate
IN (
SELECT
MAX(report_max_dates.createdDate)
FROM
[dbo].[Reports] report_max_dates
GROUP BY
report_max_dates.seedLot
)
현재 나는이에 내려 있습니다
db.ReportLists.Select(rl => db.ReportItems
.Where(ri => ri.ReportListId == rl.Id)
.Select(ri => db.Reports
.Where(r => r.ReportItemId == ri.Id)
.GroupBy(r => new { r.seedLot })
.Select(g => g.OrderByDescending(x => x.createdDate).FirstOrDefault())));
LINQ의 문제는 위의이 제목이 변경 항목을 반환한다는 것입니다. 데이터베이스 내에서 모든 레코드의 기록을 유지합니다 (따라서 createdDate 순서의 첫 번째 레코드가 내림차순이어야합니다.) 제목 x에서 제목 y로 보고서를 변경하면 가장 최근의 레코드 만 필요할 때 두 제목 아래에 표시됩니다. 따라서 제목 y를 아래의 하나.
편집 세부의 부족에 대한 죄송합니다. 나는 (식별자 인 seedlot) 보고서에 대한 정보를 보유하고 보고서 테이블. 보고서가 수정 될 때마다 새로운 기록을 가지고 이 경우 히스토리가 유지되도록 (예전의 것을 갱신하는 것) 삽입된다.이 경우, createdDate의 최대 엔트리는 리포트가 표시 될 가장 최근의 레코드임을 나타낸다. 리포트는 타이틀 또는 ReportItem으로 그룹화된다. 이러한 리포트 아이템 제목과 관련 보고서를 보유합니다. 이러한 reportItem은 다음과 같은 ReportList에 보관됩니다. JSON을 원하는 형식으로 출력하고 ReportItems에 연결된 상태 열과 ID 만 포함 할 수 있습니다.
보고서가 제목 a에서 제목 b로 이동 된 경우, 제목 외래 키가 변경된 제목까지 링크 된 새 레코드가 입력됩니다. 이 경우 위의 주어진 LINQ는 제목 b에 대한 최신 항목 만 반환해야하는 경우 (위의 예 에서처럼) 각 ReportItem 아래에 레코드를 반환합니다. 이 이외의 LINQ 문은 createdDate에 대한 가장 최근의 레코드 만 반환합니다. 여기
는
public class ReportList {
public int Id {get;set;}
public string status {get;set;}
public List<ReportItem> {get;set;}
}
public class ReportItem {
public int Id {get;set}
public string title {get;set;}
public List<Report> {get;set;}
}
public class Report {
public int Id {get;set;}
public string Lot {get;set;}
... Other data ...
public DateTime createdDate {get;set;}
}
감사합니다, Dman
그래서 seed_lot은 이름 변경을 겪은 서로 별개의 보고서와 별개의 보고서를 구별한다는 점을 이해합니다. 즉, report_max_dates가 실행되는 한, 이름이 변경된 보고서는 실제로 별개의 (관련없는) 보고서와 다르지 않습니다. –
자세한 내용을 입력하십시오. 당신이 원하는 것을 설명하십시오. 그것은 SQL 스 니펫과 잘못된 linq 쿼리에서 유추하기 어렵습니다. 그리고 한 가지 보고서의 다양한 버전이 어떻게 함께 유지되는지 설명하십시오. –
업데이트 기록의 체인을 추적하여 incarnation의 seed_lot을 기반으로 한 보고서의 최신 버전 *을 가져와야하므로이 LINQ 버전을 많이 (?) 처음에 보일 수도 있습니다. . –