使用GroupJoin进行投影中的EF eager load collection

时间:2015-02-25 14:10:46

标签: entity-framework linq-to-entities

我正在尝试与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 */);

有效,但当然每个结果会产生一个新的数据库查询。

我应该如何继续加载此收藏品?

0 个答案:

没有答案