Linq:选择列表中的Polymophic实体获取

Linq:选择列表中的Polymophic实体获取,linq,entity-framework-4.1,Linq,Entity Framework 4.1,我想做以下事情 FROM o IN orders SELECT new OrderContainer { Contact = (PostalContact) o.Contact } 因此,希望您可以看到订单的“联系人”将是派生类型。然而不幸的是,它似乎并没有进行多态获取!有没有办法做到这一点 干杯,伊恩。尝试使用扩展方法。OfType() 按顺序从o开始 选择new OrderContainer{Contact=o.Contact.OfType().FirstOrDefault()} 编辑

我想做以下事情

FROM o IN orders
SELECT new OrderContainer { Contact = (PostalContact) o.Contact  }
因此,希望您可以看到订单的“联系人”将是派生类型。然而不幸的是,它似乎并没有进行多态获取!有没有办法做到这一点


干杯,伊恩。

尝试使用扩展方法。OfType()

按顺序从o开始
选择new OrderContainer{Contact=o.Contact.OfType().FirstOrDefault()}
编辑:

一种获取完整对象数据的方法,但我怀疑这是否足以满足您的需要

from c in contacts.OfType<PostalContact>()
where c.Orders.Any(o=>o.Contact.Id == c.id)    
select new OrderContainer { Contact = c } 
来自contacts.OfType()中的c
其中c.Orders.Any(o=>o.Contact.Id==c.Id)
选择new OrderContainer{Contact=c}

另一方面,如果将基类(entity)设置为abstract,您可能会发现该entity将加载完整的对象。但由于生成了查询,因此不建议这样做。如果您正在研究此问题,您可能希望查看(TPH)联系人的每个层次结构的表

是从
Contact
继承的
PostalContact
映射实体吗?我认为这行不通,因为o.联系人不可删除。我同意,我第一次尝试回答时就错过了。谢谢你的努力。无论如何,我现在将使用连接执行一个较低级别的查询。
from c in contacts.OfType<PostalContact>()
where c.Orders.Any(o=>o.Contact.Id == c.id)    
select new OrderContainer { Contact = c }