2011-05-03 45 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