8.06.2011

Tipos Anónimos y Expresiones Lambda

En post pasados hemos hecho consultas utilizando LinqToEntities o LinqToXml y hemos retornado tipos anónimos en cada consulta. En realidad la necesidad de tener un tipo anónimo viene del hecho de que en algunos casos hacemos consultas que dada su estructura se solicitan unos datos de una fuente y otros datos de otra fuente. Por ejemplo, supongamos que tenemos una tabla para Clientes y otra tabla para Órdenes, y queremos hacer una consulta que me devuelva el nombre del cliente, dirección del cliente y el número de cada orden que el cliente posee. En este caso el escenario sería el siguiente:

image

El modelo del EntityFramework para acceder a estas tablas sería el siguiente:

image

Si hacemos la consulta utilizando LinqToEntities esta luciría de la siguiente forma:

image

Como podemos ver, la hacer un join de las dos tablas, no tenemos un tipo que represente el tipo que queremos obtener, por lo tanto debemos crear un tipo anónimo tal y como se ve en la consulta. La pregunta sería: ¿ cómo lograr lo mismo utilizando expresiones Lambda?

La expresión lambda es un poco más abstracta pero nos da el mismo resultado. El código para hacer la consulta anterior con una expresión lambda es el siguiente:

image

Como vemos en el código anterior, utilizamos el método de extensión join y luego le indicamos con que lista de entidades hacer el join, luego sobre cuales campos se hace el join, y por último creamos el tipo anónimo.

Etiquetas de Technorati: ,

No hay comentarios: