gpt4 book ai didi

c# - 让 Entity Framework 在 Group By 上急切加载

转载 作者:太空狗 更新时间:2023-10-29 19:48:03 25 4
gpt4 key购买 nike

我知道更改查询的形状会导致 Entity Framework 忽略 include 调用,但是有没有一种方法可以让它在我进行多选和分组时加载子属性。在下面的示例中,我想通知在特定时间段内预订了工作的所有员工。在 where 之后调用 .ToArray() 只访问数据库一次,但我正在内存中执行 SelectMany 和 GroupBy。有没有办法让 SelectMany 和 GroupBy 在 SQL 服务器上发生,并且仍然包含 ServiceType 和 Ship 以及员工详细信息?

我正在寻找一种方法来对数据库进行一次 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);

最佳答案

以下应该有效:

var q = from e in DataContext.Employees
where e.Job.Start > ....
order by e.Job.Start
select new {Employee = e, Job = e.Job, Ship = e.Job.Ship, ServiceType = e.Job.ServiceType}; // No db hit yet.

var l = q.GroupBy(item=>item.Employee) // no db hit yet.
.ToList(); // This one causes a db hit.

关于c# - 让 Entity Framework 在 Group By 上急切加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12470002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com