1

私のEntityFrameworkには、次のような3つの関連付けられたテーブルがあります。

私のEntityFrameworkには、次のような3つの関連付けられたテーブルがあります。

ファイルがジョブで最後に使用された時刻を取得しようとしています。File.Name の値があり、Job.ExecutedOn の最大値を取得する必要があります。where 句を使用して File.FileId を取得し、別の式で FileHistory.JobId のリストを取得し、最後に 3 番目の式で 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 に答える