2013-11-22 84 views
0

將由Reflection返回的泛型實體集轉換爲具有BaseClass類型的EntitySet時出現問題。使用基類類型將由Reflection反射返回的泛型實體集作爲實體集投射

我所有的LINQ2SQL類名爲LinqClassBase這樣一個基類繼承:

public partial class MyTable1 : LinqClassBase 

我寫這封信是需要通過所有子EntitySets遍歷基類的方法。

我可以檢索PropertyInfo OK作爲matchingEntitySetProperty。

// The GetMatchingProperty method (not shown) 
// simply gets all the properties with Type EntitySet 
var matchingProperty = entitySetProperty.GetMatchingProperty(this.GetType()); 

我也可以得到它的值。

// This returns EntitySet<MyTable1> 
var matchingSet = matchingProperty.GetValue(this); 

這裏的問題是我不能調用ToList方法,因爲對象沒有強類型。

var newList = matchingSet.ToList().ConvertAll(
    x => x.MyLinqBaseClassMethod() 
); 

我想鑄造它作爲EntitySet的,但它返回null:

// This returns null 
var matchingSet = matchingProperty.GetValue(this) as EntitySet<LinqClassBase>; 

爲什麼這個轉換返回NULL?我猜是因爲C#不能將EntitySet轉換爲EntitySet。

如果這個演員陣容是不可能的,有沒有另一種方法來鑄造它?

注意:我想過使用另一層Reflection來調用ToList方法,但後來我遇到了ConvertAll方法和MyLinqBaseClassMethod的同樣的問題。

回答

1

我想通了。將它轉換爲IEnumerable使我可以訪問ToList方法,並且不會導致它返回null。

var matchingSet = matchingProperty.GetValue(this) as IEnumerable<LinqClassBase>; 

我仍然不知道爲什麼投它EntitySet失敗。但至少我有我的解決方案。