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

时间:2011-11-28 08:09:19

标签: c# entity-framework-4

我已经编写了以下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实体获取导航属性。

1 个答案:

答案 0 :(得分:0)

进行投影或手动加入后,不会执行预先加载(Include)。它是实体框架的“特征”(=设计)。

我不明白为什么重要?您只选择了电子邮件(将其投影到CustomerInfo),这样您就不需要了,而且永远不会得到Address

编辑:

使用它来解决问题:

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

您不再需要Include