Каков наилучший способ приведения каждого элемента в запросе LINQ to Entities к интерфейсу?

У меня есть объект сущности «Пользователь», который реализует «IUser»:

IQueryable<User> users = Db.User;
return users;

Но то, что я на самом деле хочу вернуть, это:

IQueryable<IUser>

Итак, как лучше преобразовать

IQueryable<User>

to

IQueryable<IUser>

без фактического выполнения запроса? Прямо сейчас я делаю это, но это похоже на взлом:

IQueryable<IUser> users = Db.User.Select<User, IUser>(u => u);

person Mike Comstock    schedule 06.08.2009    source источник
comment
Craig Stuntz прав: L2E не поддерживает метод Cast. В случае сбоя: невозможно преобразовать тип «MyType» в тип «MySubTypet». LINQ to Entities поддерживает только приведение примитивных типов Entity Data Model. Я удалил свой ответ, поскольку он не предоставил никакого значения.   -  person bruno conde    schedule 06.08.2009
comment
Разве это желание не загружает результаты? он не получает всю таблицу, когда для каждой части запроса?   -  person Maslow    schedule 24.02.2012
comment
Какая версия .NET? В .NET 4 вы должны иметь возможность назначать любой IQueryable‹User› переменной типа IQueryable‹IUser› без необходимости приведения всех записей в список...   -  person jessehouwing    schedule 05.05.2012


Ответы (1)


Ваше «хакерское» решение выглядит хорошо для меня.

person Craig Stuntz    schedule 06.08.2009
comment
Я только что попробовал это со следующим исключением: выражение «TypeAs» с вводом типа «Bla.User» и проверкой типа «Bla.IUser» не поддерживается. В запросах LINQ to Entities поддерживаются только типы сущностей и сложные типы. - person Mike Comstock; 06.08.2009
comment
Спасибо за тест. Уберу альтернативу. - person Craig Stuntz; 06.08.2009
comment
Спасибо за быстрые ответы Крейг! - person Mike Comstock; 06.08.2009