2012-05-26 2 views
1

의 최대 값을받을 수 있나요 :는 어떻게 세 개의 테이블을 통과하고 난 그렇게 같은 세 개의 관련 테이블이 내 EntityFramework에서 값

In my EntityFramework I have three associated tables like so:

내가 파일에 사용 된 마지막 시간을 얻으려고 직업. File.Name 값이 있고 Job.ExecutedOn의 최대 값을 가져와야합니다. File.FileId를 Where 절로 가져온 다음 별도의 식에서 FileHistory.JobId의 목록을 가져온 다음 마지막으로 세 번째 식에서 Job.ExecutedOn의 최대 값을 얻습니다. 그것은 매우 서투른 느낌.

File.Name에 대한 값을 받아들이고 테이블 전체에서 Job.ExecutedOn의 최대 값을 반환하는 단일식이 필요했습니다. 이것이 가능한가? 방법?

답변

2

이 내가이 당신을 위해 작동합니다 생각 트릭

DateTime GetLastExecutionTime(ObjectContext context, string fileName) 
{ 
    var query = from file in context.Files 
        join history in context.FileHistories 
         on file.FileID equals history.FileID 
        join job in context.Jobs 
         on history.JobID equals job.JobID 
        where file.FileName == fileName 
        select job.ExecutedOn; 

    var result = query.Max(); 
} 
+0

쿼리 구문에 몇 가지 오류가있는 경우이를 해결하기 위해 대답을 업데이트했습니다. –

+0

jeroenh, 멋진 터치가 기능에 넣습니다. 감사합니다 – JimBoone

+0

스캇, 도와 줘서 고마워. 나는 조인에 대해 생각해 봤어야했다. – JimBoone

1

을 수행해야합니다

var query = 
    from file in dc.Files 
    where file.Name == fileName 
    from history in file.FileHistories 
    orderby history.Job.ExecutedOn descending 
    select history.Job.ExecutedOn; 
var lastExecutedDate = query.First(); 

가 나는 방법으로 그것을 쓴 쉽게하는 대신 관련 작업을 반환 할 수 있도록. 이를 수행하려면 최종 프로젝션을 select history.Job으로 변경하십시오.

그렇지 않으면 정렬을 제거하고 First() 대신 Max()의 쿼리를 사용할 수 있습니다.

+0

제프, 슈퍼 손가락, 조인을 통해 저글링에 액세스 할 수있게 해주는 멋진 터치. 다른 응용 프로그램에서이 작업을 수행해야합니다. 감사 – JimBoone

관련 문제