【发布时间】:2023-04-02 12:38:02
【问题描述】:
我有一个 DB 表,我们称它为“People”,有一个与之关联的实体,以及一个视图模型类 Person,它包含另一个表中的对象列表,比如“Jobs”。每项工作都有一定的时间长度。使用 LINQ,我想创建一个包含 IQueryable 的 IQueryable。
数据库中有很多人。我想拉那些工作超过 6 个月的人。
我拥有的是这样的:
public IQueryable<Person> GetPeople() =>
Repo<Person>.Get().Select(p => new Person
{
Name = p.Name,
Jobs = GetJobs(p.Name)
}).Where(h => h.Jobs.Count() > 0);
public IQueryable<Job> GetJobs(string name) =>
Repo<Job>.Get().Where(j => j.name == name && j.time > 6);
问题在于,这会拉动每个人,然后为每个人查询工作,这是低效的。有没有一种好的方法可以先提取工作,然后创建一个人员列表,每个人都有自己的合格工作列表?
【问题讨论】:
-
为什么人员和工作在两个不同的存储库中?
-
抱歉。他们不是。
-
@RobertMcKee 实际上,存储库略有不同。它们都是相同的界面,但具有不同的模型。我进行了编辑以显示这一点。
-
GetPeople 不会按照您目前的方式为您提供每个人的所有工作列表吗?
-
是的。对不起。这是真实事物的简化版本。我会再次编辑。