2013-04-30 3 views
0

У меня есть следующий метод, который я передал ICloseable, чтобы разоблачить свойство, с которым я хочу проверить.Как я могу получить следующую коллекцию, чтобы вернуть исходный тип?

Проблема в том, что возвращаемый тип теперь представляет собой набор типов ICloseable.

Есть ли способ проверить, не закрыт ли T, не возвращая ли его комплект ICloseable?

if (typeof(ICloseable).IsAssignableFrom(typeof(T))) 
{ 
    return base.Set<T>().Where(n => !((ICloseable)n).Closed); 
} 
+1

Этого не должно быть. Он все равно должен быть 'IEnumerable '. Что заставляет вас думать, что это 'Set '? И каков тип 'Set ()' для начала? –

+0

'Невозможно ввести тип «SomeType» для ввода «ICloseable». LINQ to Entities поддерживает только листинг примитивных или перечисляемых типов EDM. ' Это исключение, которое я получаю. Предположите, что он был брошен в ICloseable? – 2013-04-30 07:46:20

+0

Хорошо, это не похоже на проблему, о которой вы говорили вообще. Как эта ошибка каким-либо образом связана с «возвращаемым типом теперь представляет собой набор типов ICloseable»? Вы также должны пометить свой вопрос, указав, что это EF. –

ответ

1

Как IQueryable<T> ковариантно в T, вы можете попробовать:

if (typeof(ICloseable).IsAssignableFrom(typeof(T))) 
{ 
    IQueryable<ICloseable> closeables = (IQueryable<ICloseable>) base.Set<T>(); 
    return closeables.Where(n => !n.Closed).Cast<T>(); 
} 

Я не знаю, будет ли Cast определенно работать, но это стоит попробовать.

+0

Блестящий, который работал как шарм! – 2013-04-30 07:53:04

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