在将Reflection返回的Generic EntitySet转换为具有BaseClass类型的EntitySet时,我遇到了问题。
我的所有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方法,但是我会遇到转换方法和MyLinqBaseClassMethod同样的问题。
答案 0 :(得分:1)
我明白了。将它转换为IEnumerable使我可以访问ToList方法,并且不会使它返回null。
var matchingSet = matchingProperty.GetValue(this) as IEnumerable<LinqClassBase>;
我仍然不知道为什么施放它有EntitySet失败。但至少我有我的解决方案。