プロジェクト テーブルと監査テーブルの間に 1 対多の関係があります。各プロジェクト エンティティの最新のエントリを監査テーブルから選択しようとしています。
これを行うために私が理解していることから、プロジェクト ID でグループ化する前に、監査コレクションを日付で並べ替えて、各グループ (プロジェクト ID) の最初のエントリを選択して最新のエントリを取得できるようにする必要があります。
しかし、ef/linq クエリを実行すると、結果が正しくなく、order-by が無視されているように見えます。生成された SQL に order by ステートメントが含まれていません。
私が試した簡単な例を次に示します。
using (var ctx = new MyDbContext())
{
var audit = from a in ctx.ProjectAudits
orderby a.CreatedDate descending
group a by a.ProjectId into grp
select grp.FirstOrDefault();
var resultsList = audit.ToList();
}
結果は、最新ではなく、各プロジェクト ID の最も古い監査エントリで常に返されます。
このクエリに何か問題がありますか? 明らかな何かが欠けていますか?