Busqueda local

Loading

jueves, 24 de febrero de 2011

EF Query

Lo primero y lo más importante que debemos saber cuando hacemos consultas sobre el EF, es que estas consultas no se realizan sobre la Base de Datos, las consultas que realizamos se ejecutan contra el Modelo de datos.
Otro dato que debemos saber es que para poder usar un motor de base de datos, debemos usar un proveedor, este proveedor es el encargado de convertir nuestras consultas en algo que pueda entender el motor de la base de datos y es el mismo el que se encarga de convertir la respuesta en los objetos que nuestra aplicación puede manejar.
Por ejemplo para SQL se emplea el ADO.NET
Esta diferencia representa varias capas de abstracción que se pueden omitir, por ejemplo no es necesario saber cual es el motor de la base de datos, no es necesario que tengamos presente capos o tablas, y tampoco es necesario saber escribir código de T-SQL. Solo es necesario saber escribir consultas en cualquiera de las formas que nos ofrece el EF.
Hay dos formas de hacer consultas:
  • LINQ to Entities
  • Metodos
Es muy valioso para escribir código adecuado, saber cuándo usar una o la otra.
 

LINQ

Esta sintaxis fue creada buscando una forma universal de acceder a los datos, y si has programado en T-SQL, podrás ver que es muy similar a esa sintaxis. Nos ofrece los mismos comandos que en T-SQL, como son: JOIN, ORDER BY, GROUP BY, WHERE, HAVING, ETC. Y si ya tienes experiencia previa en este lenguaje, será muy fácil de aprender.
Por ejemplo:
var res = from p in context.Personas where p.Apellido == "Perez" orderby p.Nombre select ;
 

Métodos

Para poder emplear esta sintaxis debemos estar familiarizados con las expresiones Lambda. Al usar esta sintaxis aprovechamos los métodos extendidos que podemos encontrar en el Intellisense, a los cuales les enviamos expresiones lambda como parámetros.
Por ejemplo, hagamos la misma consuta que usamos en LINQ:
var res = context.Personas.Where(a => a.Apellido == "King").OrderBy(n => n.Nombre);
Desde luego al ver el código podemos notar algunas similitudes, aun que la sintaxis se ve diferente; pero el resultado es el mismo.
A pesar que no parece haber diferencias, si las hay al momento que debemos enviar la consulta a procesar, ya que el CLR, no entiende LINQ, por lo tanto lo debe convertir en algo que tenga sentido para él: Métodos. Como habrán deducido la segunda forma no necesita traducción.
 

Diferidas o Inmediatas

Las consultas pueden ser diferidas o inmediatas. Cuando creamos una consulta como las que hemos escrito previamente, estas no se ejecutan, cuando pasamos sobre ellas, en la depuración, lo que en realidad ocurre es que la consulta se almacena en la variable.
La consulta se ejecuta en realidad cuando realizamos un proceso iterativo sobre esta variable, a esto se le denomina consulta diferida. Nuestra variable almacena nuestro comando para la consulta. De esta forma podemos ejecutar la consulta las veces que sea necesario.
En algunas ocasiones necesitamos que nuestra consulta se ejecute de inmediato, esto es posible si usamos alguno de los operadores que nos ofrece LINQ.
Los operadores son:
  • ToList: Crea una List(T) a partir de un IEnumerable(T).
  • ToDictionary: Crea un Dictionary a partir de un IEnumerable(T).
  • ToLookup: Crea un Lookup Genérico a partir de un IEnumerable(T).
  • ToArray: Crea un Arreglo a partir de un Enumerable(T).
  • Average: Calcula el promedio de una secuencia numérica.
  • First: Regresa el primer element de la lista.
  • Count: Cuenta los elementos de la lista.
Max: Regresa el valor máximo de una lista de valores.
Según sea nuestra necesidad al codificar, debemos considerar estos puntos que aquí se exponen, ya que pueden redundar en un mejor desempeño de nuestro código.

No hay comentarios:

Publicar un comentario