Linq:选择列表中的多态实体提取

时间:2011-05-03 15:53:33

标签: linq entity-framework-4.1

我想做以下事情......

FROM o IN orders
SELECT new OrderContainer { Contact = (PostalContact) o.Contact  }

所以希望您可以看到订单的“联系人”将是派生类型。不幸的是,它似乎没有进行多态获取!无论如何要实现这个目标吗?

干杯,伊恩。

1 个答案:

答案 0 :(得分:2)

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

from o in orders 
select new OrderContainer { Contact = o.Contact.OfType<PostalContact>().FirstOrDefault() } 

编辑:

获取完整对象数据的方法,但我怀疑这对您的需求是否足够好。

from c in contacts.OfType<PostalContact>()
where c.Orders.Any(o=>o.Contact.Id == c.id)    
select new OrderContainer { Contact = c } 

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