在XPO中,设如上图的个例子,当需要取出所有Customer时,我们可以简单的
XPCollection<CustomerBase> xpCustomers = new XPCollection<CustomerBase>(session1);
但是此时我们只能访问基类的成员。假设CustomerRegistered有一名为OwnedProducts的属性,则无法访问到了,因为对基类CustomerBase来说,它并不认识这个属性。
使用XPO的UpCasting特性则可以简单的解决这个问题。只需要修改xpCustomers的XPBaseCollection.DisplayableProperties属性为类似:"Oid;CustomerName;<CustomerRegistered>OwnedProducts"的形式即可。
同样的技巧亦可以用在构造查询条件中,如:
XPCollection<CustomerBase> xpCustomers = new XPCollection<CustomerBase>(session1, CriteriaOperator.Parse("<CustomerRegistered>OwnedProducts = 'XtraGrid' or <CustomerTrialed>TrialedProducts = 'XtraGrid'" ));