2014-01-28 3 views

ответ

7

Вам не нужно.

IEnumerable<T> является ковариантным; List<MyClass> неявно конвертируется в IEnumerable<IMyClass>.


.Net 3.5 не использует ковариацию, поэтому вам нужно бросить его самостоятельно.

Вы можете либо вызвать .Cast<IMyClass>() или отливать выражение select в IMyClass так, что запрос возвращает IMyClass в первую очередь.

+1

Этот предполагает C# 4 или новее, нет? – Douglas

+0

Это проект C# 3.5. – elite5472

+0

@ elite5472: См. Редактирование. – SLaks

0

Пока MyClass реализует IMyClass, это должно быть хорошо, как есть.

2

Если вы используете старую версию C#, который не поддерживает covariance, вы можете использовать Cast:

var result = context.BEntries 
        .Where(x => x.a == "a") 
        .Select(x => new MyClass() { a = x.a }) 
        .AsEnumerable() 
        .Cast<IMyClass>(); 
+0

Это выглядит так, но я получаю эту ошибку: '{" Невозможно передать тип MyClass для типа «IMyClass». LINQ to Entities поддерживает только приведение типов примитивов Data Entity Data. »}' ​​ Содержание класса - это довольно простые базовые типы, некоторые с нулевыми значениями. – elite5472

+0

@ elite5472: Я добавил «AsEnumerable» (на основе [этого ответа] (http://stackoverflow.com/a/1361100/1149773)); проверьте, работает ли он сейчас. – Douglas

0

Не используйте var, просто определим List или IEnumerable вашего интерфейса

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