2011-05-03 46 views
0

获取我想要做以下...的Linq:Polymophic实体在选择列表

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

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

干杯,伊恩。

+0

“PostalContact”映射实体是否继承自“Contact”? – 2011-05-03 18:53:43

回答

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 } 

,另一方面,如果设置的基类(实体)来抽象,你可能会发现,实体将加载完整的对象。但是由于生成的查询,这不被推荐。如果您正在研究此问题,您可能需要查看(TPH)针对您的联系人的每个层次结构的表

+0

我不认为这会起作用,因为o.Contact不是IE无法使用的。 – 2011-05-04 14:05:58

+0

我同意,我错过了第一次尝试回答 – 2011-05-04 15:32:18

+0

非常感谢您的努力。无论如何,我现在要使用连接进行低级查询。 – 2011-05-04 21:10:20