2009-08-06 9 views
7

Tengo un objeto entidad 'Usuario' que implementa 'IUser':¿Cuál es la mejor forma de convertir cada elemento en una consulta de LINQ a Entidades a una interfaz?

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

Pero lo que realmente quiero volver es:

IQueryable<IUser> 

Entonces, ¿cuál es la mejor manera de convertir

IQueryable<User> 

a

IQueryable<IUser> 

sin ejecutar realmente la consulta? En este momento estoy haciendo esto, pero parece un truco:

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

Craig Stuntz es correcto: L2E no es compatible con el método Cast. Si falla con: "No se puede convertir el tipo 'MyType' para escribir 'MySubTypet'. LINQ to Entities solo admite el moldeado de tipos primitivos de Entity Data Model.". Eliminé mi respuesta ya que no proporcionaba ningún valor. –

+0

¿No está ansioso de cargar los resultados? no obtiene toda la tabla cuando para cada parte de la consulta? – Maslow

+0

¿Qué versión de .NET? En .NET 4 debería poder asignar cualquier IQueryable a una variable de tipo IQueryable sin la necesidad de un molde de todas las entradas es la lista ... – jessehouwing

Respuesta

5

Su solución "hacky" se ve bien para mí.

+0

Su correcto. Acabo de hacer una prueba rápida. (+1) –

+0

Lo he intentado con la siguiente excepción: No se admite la expresión 'TypeAs' con una entrada de tipo 'Bla.User' y una verificación de tipo 'Bla.IUser'. Solo los tipos de entidades y tipos complejos son compatibles con las consultas de LINQ to Entities. –

+0

Gracias por la prueba. Eliminaré la alternativa. –

Cuestiones relacionadas