2013-11-22 2 views
0

У меня возникает проблема при создании Generic EntitySet, возвращаемого Reflection как EntitySet с типом BaseClass.Кастинг Generic EntitySet, возвращаемый Reflection как EntitySet с базовым классом

Все мои классы Linq2SQL наследуют от базового класса с именем LinqClassBase так:

public partial class MyTable1 : LinqClassBase 

Я пишу метод в этом базовом классе, который должен перебора всех дочерних EntitySets.

Я могу получить PropertyInfo OK в качестве соответствияEntitySetProperty.

// 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 но он возвращает нуль:

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

Почему это произнесения возвращение нуль? Я предполагаю, что C# не может передавать EntitySet в EntitySet.

Если этот прилив невозможен, есть ли другой способ бросить его?

Примечание: Я думал об использовании другого слоя Reflection для вызова метода ToList, но затем я бы столкнулся с той же проблемой для метода ConvertAll и снова для метода MyLinqBaseClassMethod.

ответ

1

Я понял. Передача его в IEnumerable дает мне доступ к методу ToList и не вызывает его возврата null.

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

Я до сих пор не знаю, почему его литье имеет EntitySet. Но, по крайней мере, у меня есть мое решение.

Смежные вопросы