2012-05-26 63 views
1

在我的EntityFramework的我有三個關聯的表像這樣:我如何穿越三個表,並獲得最大的價值

In my EntityFramework I have three associated tables like so:

我試圖獲得最後一次文件使用上一份工作。我有一個File.Name的值,我需要獲得Job.ExecutedOn的最大值。我可以用where子句獲取File.FileId,然後在一個單獨的表達式中獲取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即可。

否則,您可以刪除排序並採取查詢的Max()(而不是First())。

+0

傑夫,超級的手指,很好的接觸,以便連接工作。事實證明,我需要在另一個應用程序中這樣做。謝謝 – JimBoone