在Linq中使用Join检索数据时,导航属性为空

本文关键字:导航 属性 数据 检索 Linq Join | 更新日期: 2023-09-27 18:16:09

我编写了以下linq查询,用于从其他实体检索客户信息和客户的其他信息。例句:

var customers = CreateObjectSet<Customer>().Include(address =>address.Address).
                                            AsQueryable();
var OtherEntityies = CreateObjectSet<XYZ>().AsQueryable();
return (from other in OtherEntityies 
        join customer in customers
        on new { other.KeyID, other.TypeID }
        equals new { 
             KeyID = customer.CustomerID, 
             SecUserTypeID = (int)Type.CUSTOMER 
        }                     
        select new CustomerInfo {
             Customer=customer,
             Email = other.Email       
        }
       ).SingleOrDefault();

为了检索客户信息,我创建了一个Custom类CustomerInfo。但问题是,使用JOIN表达式后,导航属性(address.Address)是从Customer为空,但有时它的工作很好。我不明白这道题。请帮助我,应该如何写查询,以便我可以在使用JOIN后获得Customer实体的导航属性。

在Linq中使用Join检索数据时,导航属性为空

一旦您执行投影或手动连接,则不会执行急切加载(Include)。这是实体框架的一个"特性"(= by design)。

我不明白的是为什么这很重要?你只选择电子邮件(通过投射到CustomerInfo),所以你不需要,你永远不会得到Address

编辑:

用这个来解决问题:

    select new CustomerInfo {
         Customer=customer,
         Address = customer.Address,
         Email = other.Email       
    }

您将不再需要Include