You are on page 1of 10

UNIVERSIDAD TECNOLGICA DE LA SELVA

Organismo Descentralizado de la Administracin Pblica del Estado de Chiapas

DIVISION DE TECNOLOGAS DE LA INFORMACIN Y COMUNICACIN

Introduccin a la plataforma de Visual Studio 2008 usando LINQ

Mtro. Iram Yovan Snchez Gmez


Micrososft Certified Application Developer

Ocosingo, Chiapas. Noviembre 2008.

Requerimientos

Visual Studio 2008 Sql Server Tener instalada la base de datos NorthWind de ejemplo con sqlserver. De no contar con ella se adjunta el instalador de la base de datos.

Qu es Linq?
Se incluye en el Visual Studio 2008, se conoce como LINQ a un Lenguaje Integrado de Consultas o lo que es igual Language Integrated Query , nos va a permitir poder manipular mejor la informacin dentro de nuestras aplicaciones, se basa en varias funcionalidades, tanto como XML, y Base de datos, como orientado a Objetos.

Veamos un ejemplo simple:

Dim variables() = {18, 1, 6, 3, 10, 2} Dim Contarvalores = variables.Count Response.Write(Contarvalores)

Podemos observar que declaramos una variable de tipo arreglo que almacena 6 nmeros. Usando el mtodo count podemos determinar el nmero de elementos del arreglo. Ejemplo2 Dim variables() = {18, 1, 6, 3, 10, 2, 1, 1, 1} Dim ContarvaloresDistintos = variables.Distinct.Count Response.Write(ContarvaloresDistintos)

Al igual que el ejemplo 1 se almacenan 9 valores numricos en una variable. Usando el mtodo distinct y count podemos determinar el nmero de elementos del arreglo pero que no se repiten. Por ejemplo tenemos que el numero 1 se repite 4 veces por lo tanto con la funcin distinct solo toma en cuenta 6 nmeros aunque existan 9, ya que solo tenemos 6 nmeros completamente diferentes. Ejemplo3 Dim variables() = {1,2,3} Dim ContarvaloresDistintos = variables.Sum(Function(m) m) Response.Write(ContarvaloresDistintos)

En este caso utilizamos la funcin suma que recibe como parmetros a una funcin con otro parmetro esta parte es un poco confusa y trataremos de explicarla de la mejor manera. Function(m) Hace referencia a una funcin que recibe un parmetro llamado m m despus de la funcin indica que se realizar un recorrido por todo el arreglo y el valor se ira almacenando en la variable m, que es enviado a la funcin suma, para acumular el valor y ofrecer el resultado En este caso el resultado ser: 6 Ejemplo4 Dim variables() = {1,2,3} Dim ContarvaloresDistintos = variables.Sum(Function(m) m+1) Response.Write(ContarvaloresDistintos)

En este caso utilizamos la funcin suma que recibe como parmetros a una funcin con otro parmetro. Function(m) Hace referencia a una funcin que recibe un parmetro llamado m m + 1 despus de la funcin indica que se realizar un recorrido por todo el arreglo y el valor se ira almacenando en la variable m, la nica diferencia con el ejemplo anterior radica es el valor de uno que se incrementara a la variable m antes de ser sumada en el acumulador que dar el resultado final. el Valor de m en el Valor de m+1 arreglo 1 1+1=2 2 2+1=3 3 3+1=4 Valor de Suma 2+0=2 3+2=5 5+4=9

Posicin en arreglo 0 1 2

En este caso el resultado ser: 9 Ejemplo5 (Suma de nmeros impares) Dim variables() = {1, 2, 3} Dim ContarvaloresDistintos = variables.Count(Function(m) m Mod 2 = 1) Response.Write(ContarvaloresDistintos)

En este caso utilizamos la funcin suma que recibe como parmetros a una funcin con otro parmetro. Function(m) Hace referencia a una funcin que recibe un parmetro llamado m m mod 2 = 1 Funciona como una condicin la cual evala el valor de m modulo 2 y si el resultado es uno, nos dice que m es impar por lo tanto lo contabiliza y si el resultado no es uno no lo contabiliza el Valor de m en el Valor de m mod 2 arreglo 1 1 mod 2= 1 2 2 mod 2= 0 3 3 mod 2= 1 Valor de contar 0+1=1 1+0=1 1+1=2

Posicin en arreglo 0 1 2

En este caso el resultado ser: 2 nmeros impares Ejemplo5 (Suma de nmeros pares) Dim variables() = {1, 2, 3} Dim ContarvaloresDistintos = variables.Count(Function(m) m Mod 2 = 0) Response.Write(ContarvaloresDistintos)

En este caso utilizamos la funcin suma que recibe como parmetros a una funcin con otro parmetro. Function(m) Hace referencia a una funcin que recibe un parmetro llamado m m mod 2 = o Funciona como una condicin la cual evala el valor de m modulo 2 y si el resultado es cero, nos dice que m es par por lo tanto lo contabiliza y si el resultado no es uno, no lo contabiliza el Valor de m en el Valor de m mod 2 arreglo 1 1 mod 2= 1 2 2 mod 2= 0 3 3 mod 2= 1 Valor de contar 0+0=0 0+1=1 1+0=1

Posicin en arreglo 0 1 2

En este caso el resultado ser: 1 nmero par

Modelando bases de datos con LINQ to SQL: Visual Studio Orcas viene con un diseador de LINQ to SQL que nos aporta una forma fcil de modelar y visualizar una base de datos como un modelo de objeto de LINQ to SQL. El prximo post cubrir en ms profundidad cmo usar este diseador Usando ese diseador LINQ to SQL puedo crear fcilmente una representacin de la base de datos Northwind:

El diseo de arriba define cuatro clases: Product, Category, Order y OrderDetail. Las propiedades de cada clase mapean las columnas de cada table en la base de datos. Cada instancia de esa clase representa una fila en las tablas. Las flechas entre las cuatro clases de arriba representan las asociaciones/relaciones entre las diferentes entidades. Son tpicamente modeladas como relaciones primarykey/foreign-key en la base de datos. La direccin de las flechas en el diseador indican si la relacin es uno-a-uno o uno-a-varios. Se aadirn propiedades fuertemente tipadas a las entidades basndose en esto. Por ejemplo, la clase Category de arriba tiene una relacin de uno-a-varios con la clase Product. Esto implica que tendr una propiedad Categories que es una coleccin de objetos Product con esa categora. La clase Product entonces tiene una propiedad Category que apunta a una instancia de la clase Category representando la categora a la que pertenece el producto.

El panel de la derecha del diseador LINQ to SQL contiene una lista de procedimientos almacenados que interactan con nuestro modelo de base de datos. En el ejemplo de arriba hemos aadido un SPROC (Procedimiento almacenado) GetProductsByCategory. Como entrada recibe un categoryID, y devuelve una secuencia de Product como resultado. Veremos cmo llamar a este procedimiento almacenado en un ejemplo. Entendiendo la clase DataContext Cuando pulsis el boton save del diseador de LINQ to SQL, Visual Studio generar clases .NET para representar las entidades y las relaciones de la base de datos que hemos modelado. Por cada archivo aadido a nuestra solucin por el diseador LINQ to SQL tambin se generar una clase DataContext. Esta clase es a traves de la cual realizaremos las consultas a las entidades de nuestra base de datos. Esta clase tendr propiedades que representarn a cada tabla que hemos modelado, as como mtodos para cada procedimiento almacenado que aadamos. Por ejemplo, aqu tenis la clase NorthwindDataContext:

Ejemplos de LINQ to SQL Una vez que hemos modelado nuestra base de datos con el diseador de LINQ to SQL, podemos escribir cdigo fcilmente para trabajar con l. Aqu tenis unos cuantos ejemplos que muestran tareas comunes con datos: 1) Consultando Products de la base de datos El siguiente cdigo usa una consulta LINQ para obtener una secuencia IEnumerable de objetos Product. Fijate que este cdigo est consultando a traves de la relacin Product/Category para obtener aquellos productos de la categora Beverages.

2) Actualizando un producto en la base de datos. El cdigo siguiente muestra cmo obtener un producto de la base de datos, actualizar su precio, y guardar los cambios en la base de datos:

3) Aadir una nueva categora y dos nuevos productos en la base de datos. El siguiente cdigo muestra cmo crear una nueva categora, y entonces crear dos nuevos productos y asociarlos a la nueva categora. Los tres son despus guardados en la base de datos. Fijaos como no necesitamos administrar manualmente las relaciones primarykey/foreignkey. Slo tenemos que aadir los objetos Product en la coleccin Products de la categora, y luego aadir el nuevo objeto Category en la coleccin de Categories del DataContext, LINQ to SQL sabr automticamente crear las PF/FK necesarias:

4)Borrar productos de la base de datos. El cdigo siguiente muestra cmo borrar todos los productos Toy de la base de datos:

5) Llamar a un procedimiento almacenado. El cdigo siguiente muestra cmo obtener entidades de la tabla Product sin usar una consulta LINQ, sino llamando al procedimiento almacenado GetProductsByCategory que aadimos a nuestro modelo de datos. Fijos que cuando obtenemos los resultados de la tabla Product, podemos actualizar/borrarlos y llamar a db.SubmitChanges() para hacer las modificaciones en la base de datos.

6) Obtener productos con paginado del lado del servidor El cdigo siguiente muestra cmo implementar un paginado eficiente en el lado servidor como parte de una consulta LINQ. Usando los operadores Skip() y Take(), slo devoleremos 10 filas de la base de datos - a partir de la fila 200.

Resmen: LINQ to SQL nos permite modelar la capa de datos de nuestras aplicaciones de una forma simple y limpia. Una vez que hayamos definido nuestro modelo de datos, podemos realizar consultas, inserciones, actualizaciones y borrados sobre ella de forma fcil y eficiente.

You might also like