我已经编写了以下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();
要检索客户信息,我创建了一个自定义类CustomerInfo
。
但问题是在使用JOIN表达式之后,导航属性(address.Address
)从Customer
开始为空,但有时它工作正常。我无法解决问题。请帮助我,如何编写查询,以便在使用JOIN后我可以使用Customer
实体获取导航属性。
答案 0 :(得分:0)
进行投影或手动加入后,不会执行预先加载(Include
)。它是实体框架的“特征”(=设计)。
我不明白为什么重要?您只选择了电子邮件(将其投影到CustomerInfo
),这样您就不需要了,而且永远不会得到Address
。
编辑:
使用它来解决问题:
select new CustomerInfo {
Customer=customer,
Address = customer.Address,
Email = other.Email
}
您不再需要Include
。