クエリの形を変更すると、Entity Frameworkがインクルード呼び出しを無視することがわかりましたが、選択したときにサブプロパティを読み込む方法があります。グループ。次の例では、特定の期間に就業しているすべての従業員に通知したいと考えています。その場所の後に.ToArray()を呼び出すと、データベースに一度しかヒットしませんが、メモリ内でSelectManyとGroupByを実行しています。 SelectManyとGroupByをSQLサーバー上で実行し、ServiceTypeとShipとEmployeeの詳細を含める方法がありますか?Entity Frameworkをグループに積極的に読み込むBy
データベースに対して1回のSQL呼び出しを行い、期間内のジョブとそれが割り当てられているジョブの一覧を持つ従業員のリストを作成する方法を探しています。
var employeeJobs = DataContext.Jobs.
Include("ServiceType").
Include("Ship").
Include("JobEmployees.Employee").
Where(j => j.Start >= now && j.Start <= finish).
OrderBy(j => j.Start).
ToArray().
SelectMany(j => j.JobEmployees, (j, je) => new {
Job = j,
Employee = je.Employee
}).GroupBy(j => j.Employee);
_Iはからmemory_にSelectManyとGROUPBYをしています。どうして知っていますか? EFでのクエリの形状は分かりにくい場合があります。 –
従業員とその職務のリストにしたい場合は、別の方法でクエリを実行することをお勧めします:employeeJobs = DataContext.Employees e e.Any(...職務基準...) eを選択します。私は、インテリセンスの助けを借りずにLINQクエリを書くことができませんが、アイデアは得られますか? – GTG
@GertArnold 'ToArray'の呼び出しは結果を具体化し、' SelectMany'と 'GroupBy'は' ToArray'の呼び出しの後に来ます。 – casperOne