1

在我的 EntityFramework 中,我有三个相关联的表,如下所示:

在我的 EntityFramework 中,我有三个相关联的表,如下所示:

我正在尝试获取最后一次在工作中使用文件的时间。我有 File.Name 的值,我需要获取 Job.ExecutedOn 的最大值。我可以使用 where 子句获取 File.FileId,然后在单独的表达式中获取 FileHistory.JobId 的列表,最后在第三个表达式中获取 Job.ExecutedOn 的最大值。感觉非常笨拙。

我希望有一个表达式接受 File.Name 的值并遍历表以返回 Job.ExecutedOn 的最大值。这可能吗?如何?

4

2 回答 2

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();
 }
于 2012-05-26T20:42:05.733 回答
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())。

于 2012-05-26T21:03:47.713 回答