在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
实体的导航属性。
一旦您执行投影或手动连接,则不会执行急切加载(Include
)。这是实体框架的一个"特性"(= by design)。
我不明白的是为什么这很重要?你只选择电子邮件(通过投射到CustomerInfo
),所以你不需要,你永远不会得到Address
。
用这个来解决问题:
select new CustomerInfo {
Customer=customer,
Address = customer.Address,
Email = other.Email
}
您将不再需要Include