我知道更改查詢的形狀會導致實體框架忽略包含調用,但有沒有一種方法,我可以讓它加載子屬性時,我做了一個選擇許多和一羣通過。在下面的例子中,我想通知所有在特定時間段內有工作的員工。調用.ToArray()之後只能訪問數據庫一次,但我在內存中執行SelectMany和GroupBy。有沒有一種方法可以讓SelectMany和GroupBy在SQL服務器上發生,並且仍然包含ServiceType和Ship以及Employee細節?獲取實體框架,以迫切加載組通過
我正在尋找一種方法對數據庫進行一次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