Aprende LINQ de forma fácil y sencilla

Ahora que formalmente ya salió al mercado Visual Studio 2008 y que tiene características muy novedosas como LINQ, entre las más sobresalientes, este post está dedicado para todos quienes estén interesados en estudiar, testear o simplemente aprender las sentencias LINQ antes de realizarlo en VS2008, existe una herramienta que permite hacer todo esto, que es libre y que no necesita instalación, el único requisito previo para ejecutar esta herramienta es tener instalado el .Net Framework 3.5 y listo a usarla, esta herramienta se llama LINQPad que la puedes descargar aqui.

LINQPad Total
Esta herramienta se divide en 4 secciones:
Conexiones
LINQPad Conection

En la parte superior izquierda de LINQPad existe las opciones de conectarse a una base de datos SQL Server ocasionalmente o permanentemente como en el server explorer de Visual Studio. Además a través de la conexión se puede navegar entre los objetos de la base: tablas, funciones, procedimientos almacenados, vistas, etc.

Ejemplos y Sentencias

LINQPad Examples

La primera opción de la parte inferior izquierda se encuentra un panel con las sentencias que se han desarrollado y guardado, y junto a esto existe un sección donde se encuentran más de 200 ejemplos disponibles para aprender LINQ. La sección de ejemplos se divide en una breve introducción de lo que es LINQPad y luego ejemplos desarrollados en C# divido en secciones de LINQ Queries, LINQ Operators, LINQ to XML, LINQ Regular Expressions. Parece que en esta versión no se incluyen ejemplos para Visual Basic.

Consultas y Navegación

LINQPad Consultas

En la parte superior derecha de la herramienta se encuentra la sección de edición de las consultas, donde podremos ejecutar o detener una consulta, seleccionar la conexión que debe usar la sentencia que estamos desarrollando, además se elige el lenguaje en el que se desea escribir la consulta. Es importante mencionar que tiene soporte para C# como para Visual Basic, además puede ser útil también el compilador de sentencias SQL. Existe también alertas de error de sintaxis de las consultas en la parte superior de esta sección.

Resultados

LINQPad Results

En esta sección se muestran los resultados fruto de las consultas ejecutadas, en ella podemos encontrar el resultapo presentado en un grid. LINQ facilita en su sintaxis manejar lambda, por lo que una vez que se haya escrito y verificado el resultado de la consulta se puede generar la sintaxis de la consulta en expresiones lambda. Y la opción que está junto a lambda es SQL, al ingresar en esta opción se genera código SQL de la consulta realizada a una base de datos.

En la imagen anterior en la sección de resultados se puede observar la conversión a una sentencia lambda. En fin son varias las cosas que podemos realizar a través de esta herramienta, inclusive se pueden agregar assemblies. Entonces que esperas para ponerte a estudiar o simplemente testear tus consultas de forma sencilla y rápida. Les dejo con la imagen total de la herramienta.

LINQ con varios orígenes de datos

Una vez superado unos inconvenientes, he podido retomar un poco esta parte VS2008 y fundamentalmente LINQ, espero este post sea de su utilidad.

En un post anterior de LINQ había mostrado una demo 3 capas con SQLServer y unas pruebas con objetos y XML a lo cual LINQ ha pasado las pruebas.

Pretendía a través de este demo realizar una conexíon con 2 distintos orígenes de datos (SQL y Oracle) e intentar mapear tablas tanto de SQL como de Oracle, sin embargo, con las tablas de Oracle esto no es posible. A continuación detallo todos los pasos que se deben seguir para conectarse a una base oracle, con el Server Explorer. Tomar en cuenta que se debe instalar la base de datos Oracle y además el ODP (Oracle Data Provider) Net para que se pueda conectar.

  1. Seleccionar Oracle Database
  2. LINQ Multisource

  3. Ingresar el SID del servidor y el usuario y password de la base.
  4. LINQ Multisource 2
  5. Finalmente verificar que se haya conectado exitosamente.
  6. A continuación podemos ver el error resultante cuando pretendemos arrastrar una tabla Oracle en un dbml
  7. LINQ Multisource 3

En vista de que la intención inicial de la demo no fue posible, ahora intentaré al menos consultar la data de las dos bases. En Oracle están los datos de país de origen, tipo de teléfono, estado civil, etc. mientras que en SQL se encuentra la información de los empleados, por lo que para presentar el país de origen de los empleados es necesario hacer una consulta de las dos bases.

A través de un dataadapter consigo poner la data de la base Oracle en un Dataset y con el dbml de SQL intento realizar la consulta, pero nuevamente no es posible, imagino que no es posible utilizar sentencias LINQ con objetos diferentes (Dataset y dbmls), así que ya lo saben LINQ solo con objetos del mismo tipo.

El único camino que queda es mapear la data del dbml a un dataset tipificado con la estructura de las tablas de SQL e intentar realizar la consulta.

Efectivamente ese fue el mejor camino para presentar la data de dos data sources diferentes, se que la interfaz del resultado no es lo mejor que se puede hacer, pero para efectos de esta demo, considero que está bien, cumple con lo que quería mostrar.

LINQ Multisource Resultado

Además de los datos del empleado, se ha consultado los teléfonos para lo cual en el evento RowDataBound se han consultado y presentado en un grid agregado previamente como ItemTemplate. Bueno aqui tienen el código (recuerden renombrar el archivo a .zip) para que lo vean, los requerimientos para correrlo son: VS2008, SQL2005, Oracle XE 11g, ODP Net, deben crear las tablas cuyas estructuras pueden encontrar en los DataSets y la data se encuentra en la página de resultados.