Iniciación a LINQ en ASP.Net

LinQ Microsoft
Tras echarle un primer vistazo a LINQ hace unos meses finalmente me he puesto a darle caña a esta nueva tecnología desarrollada por Microsoft y que pretende facilitarnos las tareas a los desarrolladores.

¿Qué es LINQ?

LinQ (Language Integrated Query) es una nueva librería que se integra en Visual Studio 2008 y permite gestionar colecciones de datos de forma más directa utilizando un lenguaje similar al de SQL. Las colecciones de datos pueden proceder de un simple array, una base de datos relacional, un listado de objetos en caché, un archivo XML u orígenes de datos de terceros.

¿Cómo se usa LINQ?

Lo mejor para ver esto es poner un ejemplo de cómo se hacían antes las cosas y cómo pueden hacerse ahora gracias a LINQ:

Pongamos que por ejemplo tenemos una BDD de alumnos con la tabla TAlumnos y los campos Nombre, Nota y Aprobado por simplificar. Pongamos que nuestro proyecto realiza el 90% de las consultas a esa tabla, y el 70% son simples selects para mostrar datos. Como queremos ahorrarnos cientos de accesos a la BDD (abrir conexión, realizar consulta, cerrar conexión) realizamos una carga inicial de todos esos datos en caché, guardándolo todo en memoria a través de un listado de objetos definidos por la clase CAlumno de propiedades Nombre, Nota y Aprobado.

Imaginemos ahora que quiero consultar los alumnos que han aprobado, y para evitar acceder a la BDD y aprovechando que están en caché hago lo siguiente:

        Dim aprobados As New Collections.Generic.List(Of CAlumno)
        For Each alum As CAlumno In Cache.getAlumnos()
            If alum.Aprobado = True Then
                aprobados.Add(alum)
            End If
        Next

Aunque supongo que ya se entiende, Cache.getAlumnos devuelve una lista de objetos CAlumno. Por otro lado, meto los aprobados en una lista para luego insertarlos en un GridView sin problemas. Ahora veamos cómo hacer eso mismo con LINQ:

Dim aprobados As New Collections.Generic.List(Of CAlumno)
aprobados = From alum In Cache.getAlumnos() Where alum.Aprobado = True

Básicamente la sintaxis que lo inicia todo es “FROM” tras eso se coloca el origen y se le pueden añadir distintas cláusulas como “DISTINCT”, “WHERE”, “ORDER BY”, “GROUP BY”, “HAVING”, “JOIN”, “UNION”, etc y al final un “SELECT” en caso de que sólo queramos coger ciertos campos. Si en el caso anterior sólo quisiéramos los nombres:

Dim aprobados As String()
aprobados = From alum In Cache.getAlumnos() Where alum.Aprobado = True SELECT alum.Nombre

Más allá de la simplificación de código, mi pregunta ahora es… ¿qué resulta más eficiente? ¿Qué consume menos recursos o tiempo de proceso? Pues bien, lo mejor para esto es realizar un test de velocidad accediendo a los datos de un XML en LINQ y de la forma tradicional, pero otro día, que por hoy ya tenemos bastante.

Para quien quiera saber más sobre LINQ le recomiendo este post de Jorge Serrano.

5 thoughts on “Iniciación a LINQ en ASP.Net”

  1. Ostia! te llamas como yo (de apellido) … no conozco muchos con el mismo apellido. Nada, saludos y felicidades por el blog, parece interesante.

  2. Jajajaj, yo tampoco conozco muchos (bueno, alguno que otro si contamos a mis primos) pero en Facebook he llegado a encontrar a otros con quienes incluso coincido en nombre.

    Por cierto, que veo que también compartimos afición a la informática y colores futbolísticos… 😉

  3. Vaya! cantón y del barça jeje A ver si nos llevamos la champions el 27 :) Respecto mi afición, si, me dedico a ello en cuerpo y alma. Un saludo.

Comments are closed.