Saltar al contenido

Conversión de IQueryable objetar a otro objeto?

Solución:

Debe codificar la traducción o primero debe convertirla a IEnumerable. IQueryable representa el árbol de expresión traducido a alguna ejecución en el proveedor usado; en su caso, creo que será Entity framework. No puede usar ningún mapeo automático en dicha consulta porque se traducirá a SQL, que no comprenderá sus métodos .net o AutoMapper. Las proyecciones a tipos personalizados son parte de la consulta y deben estar codificadas. Puede crear un método de extensión personalizado para IQueryable y reutilícelo donde lo necesite:

public static IQueryabe<SimpleUser> ProjectToSimpleUser(this IQueryable<User> query)
{
    return query.Select(u => new SimpleUser
        {
            // Here map your fields
        });
}

Ahora puedes usar:

return repo.GetUsers().ProjectToSimpleUser();

En caso de Entity framework SimpleUser no debe ser una entidad mapeada.

Siempre que SimpleUser se pueda asignar al usuario (el usuario es una interfaz de la clase base de SimpleUser), puede

 var users = simpleUsers.Cast<User>();

opcionalmente con

 var users = simpleUsers.Cast<User>().AsQueryable();

Y si no está seguro de si todos los elementos son realmente Usuarios, puede usar OfType<User> en lugar de Cast<User>

AutoMapper es la herramienta que desea; funciona a través de la reflexión y, a menos que le indique lo contrario, mapeará las propiedades con el mismo nombre directamente.

El mapeo automático es la técnica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *