我正在尝试与Linq进行左联接到EF中的实体,并急切地在其中一个实体中加载一个集合。
左连接使用此代码:
var joinedResult = context.Set<Client>()
.GroupJoin(
context.Set<Project>(),
client => client.Id,
project => project.ClientId,
(client, projects) => new
{
Client = client,
Project = projects.FirstOrDefault()
})
.ToList();
现在Client实体有一个我要加载的Categories集合。由于这是一个投影,因此我不能在执行组连接之前包含该集合,因为我在创建匿名类型之后都不能在连接之后包含该集合。
我尝试按照this anwser的建议将匿名类型的集合添加到类似的问题中:
ClientCategories = client.Categories.Select(s => s.Name),
但是当从业务层外部的Client对象访问集合时,我不断获得ObjectDisposedException
。
在查询之后直接访问该字段,然后从业务层返回,如下所示:
joinedResult.ForEach(result => result.Client.Categories.Count() /* NOP */);
有效,但当然每个结果会产生一个新的数据库查询。
我应该如何继续加载此收藏品?