You are on page 1of 11

INGENIERA DE SISTEMAS

PROYECTOS 1

LIN Q
PRESENTADO POR:
MARA JOS CHVEZ ESTRADA

DOCENTE:
ING. SAMUEL MESTANZA ALCNTARA

Cajamarca, Abril Del 2012

Lin - Q

LINQ
Mara Jos Chvez Estrada e-mail: sweet2812@hotmail.com 702693@comunidad.upn.edu.pe

RESUMEN: En este documento se hablar acerca de


LINQ el cual es un proyecto de Microsoft que agrega consultas nativas semejantes a las de SQL a los lenguajes del Framework de .NET. El motor de LINQ es el responsable de convertir las consultas y apuntar al dominio al cual se hace referencia. LINQ posee muchas caractersticas interesantes que hacen ms fcil el trabajo del desarrollador as como Intellisence, comprobacin de sintaxis entre otras que se detallan a continuacin; proporcionando as una forma sencilla de modelar las capas de datos de nuestra aplicacin y realizar de forma eficiente consultas, actualizaciones, inserciones entre otros.

varios tipos de colecciones usando la misma sintaxis. Tales colecciones pueden incluir arreglos, clases enumerables, XML, conjuntos de datos desde bases de datos relacionales y origenes de datos de terceros.

2 QU ES LINQ?
LINQ es un conjunto de extensiones de lenguaje aadidas a C # y VB.NET. Proporciona un modelo de programacin unificado a los dominios de datos diferentes para la gestin de datos. Los desarrolladores pueden usar LINQ con cualquier fuente de datos. Pueden expresar consultas eficientemente en los lenguajes de programacin consultas que elijan, opcionalmente quieran, y transformar/incrustar los resultados de las en el formato que entonces manipular fcilmente los resultados. Los lenguajes habilitados para LINQ pueden aportar seguridad de tipos y chequeo en tiempo de compilacin el las expresiones de consulta, y desarrollar herramientas que aporten intelisense, debugging, y un gran

PALABRAS CLAVE: LINQ, SQL, XML, consultas, gestin de datos.

1 INTRODUCCIN: LINQ
Hay que recordar que segn Wikipedia Language Integrated Query (LINQ) es un proyecto de Microsoft que agrega consultas nativas semejantes a las de SQL a los lenguajes del .NET Framework, inicialmente a los lenguajes Visual Basic .NET y C#. Muchos conceptos que LINQ ha introducido fueron originalmente probados en C&#x3C9, un proyecto de investigacin de Microsoft. LINQ define operadores de consulta estndar que permiten a lenguajes habilitados con LINQ filtrar, enumerar y crear proyecciones de

Lin - Q

soporte

para refactoring

cuando

escriban

formatos y orgenes de datos. En una consulta LINQ, siempre se trabaja con objetos. Se utilizan los mismos modelos de codificacin bsicos para consultar y transformar datos de documentos XML, bases de datos SQL, conjuntos de datos ADO.NET, colecciones .NET y cualquier otro formato para el que haya disponible un proveedor LINQ.

cdigo de LINQ. LINQ soporta un modelo de extensibilidad muy rico que facilita la creacin de operadores eficientes para fuentes de datos. La versin Orcas del .NET Framework viene con libreras que habilitan LINQ sobre objetos, XML y bases de datos.

4 LAS TRES PARTES DE UNA OPERACIN 3 CONSULTAS CON LINQ


El propsito de LINQ es agregar capacidades de consulta de datos de. NET Framework de modo que cualquier dato de dominio puede ser procesado con la misma facilidad. LINQ se basa en conceptos como mtodos de extensin, tipos annimos, mtodos annimos y expresiones lambda. En el ejemplo siguiente se muestra cmo se Una consulta es una expresin que recupera datos de un origen de datos. Las consultas normalmente se expresan en un lenguaje de consultas especializado. A lo largo del tiempo se han ido desarrollando lenguajes diferentes para los distintos tipos de orgenes de datos, como SQL para las bases de datos
class IntroToLINQ { static void Main() { // The Three Parts of a LINQ Query: // 1. Data source. int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

DE CONSULTA Todas las operaciones de consulta LINQ se componen de tres acciones distintas: Obtencin del origen de datos. Creacin de la consulta. Ejecucin de la consulta.

expresan las tres partes de una operacin de consulta en el cdigo fuente. En el ejemplo se utiliza por comodidad una matriz de enteros como origen de datos, pero los mismos conceptos se aplican a otros orgenes de datos.

relacionales y XQuery para XML. Por tanto, los desarrolladores han tenido que aprender un nuevo lenguaje de consulta para cada tipo de origen de datos o formato de datos que deben usar. LINQ simplifica esta situacin al proporcionar un modelo coherente para trabajar con los datos de varios tipos de

Lin - Q

. // 2. Query creation. // numQuery is an IEnumerable<int> var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. Query execution. foreach (int num in numQuery) { Console.Write("{0,1} ", num); } } }

4.1 EL ORIGEN DE DATOS En el ejemplo anterior, como el origen de datos es una matriz, se admite implcitamente la interfaz genrica IEnumerable(). Este hecho implica que se puede consultar con LINQ. Una consulta se ejecuta en una instruccin foreach y foreach necesita tipos IEnumerable que o IEnumerable(). Los admiten

IEnumerable() o una interfaz derivada, como la genrica IQueryable(), se denominan tipos consultables. Un tipo que se puede consultar no requiere ninguna modificacin o tratamiento especial para servir como origen de datos LINQ. Si los datos de origen an no estn en memoria como tipo que se puede consultar, el proveedor LINQ debe representarlos como tales. Por ejemplo, LINQ to XML carga un documento XML en un tipo XElement que se puede consultar:
// Create a data source from an XML document. // using System.Xml.Linq; XElement contacts = XElement.Load(@"c:\myContactList.xml") ;

En la siguiente ilustracin se muestra la operacin de consulta completa. En LINQ, la ejecucin de la consulta es distinta de la propia consulta; en otras palabras, no se recuperan datos con la simple creacin de la variable de consulta.

Con LINQ to SQL, primero se crea una asignacin relacional de objetos en tiempo de diseo, ya sea manualmente o mediante el Object Relational Designer. Despus, se
Figura 1: Consulta en LINQ

escriben las consultas en los objetos y, en tiempo de ejecucin, LINQ to SQL controla la comunicacin con la base de datos. En el
3

Lin - Q

ejemplo siguiente, Customers representa una tabla concreta de la base de datos y el tipo del resultado de la consulta, IQueryable(), se deriva de IEnumerable().
Northwnd db = new Northwnd(@"c:\northwnd.mdf"); // Query for customers in London. IQueryable<Customer> custQuery = from cust in db.Customers where cust.City == "London" select cust;

variable de consulta no realiza ninguna accin ni devuelve datos. Simplemente almacena la informacin necesaria para generar los resultados cuando la consulta se ejecute posteriormente. 4.3 EJECUCIN DE LA CONSULTA
4.3.1 Ejecucin diferida

Sin embargo, la regla bsica es muy simple: un origen de datos LINQ es cualquier objeto que admite la interfaz genrica IEnumerable() o una interfaz que herede de ella. 4.2 LA CONSULTA La consulta especifica qu informacin se va a recuperar de uno o varios orgenes de datos. Opcionalmente, una consulta tambin especifica cmo debera ordenarse, agruparse y darse forma a esa informacin antes de ser devuelta. Una consulta se almacena en una variable de consulta y se inicializa con una expresin de consulta. Para simplificar la escritura de consultas, C# incluye nueva sintaxis de consulta. La expresin de consulta contiene tres clusulas: from, where y select. La clusula from especifica el origen de datos, la clusula where aplica el filtro y la clusula select especifica el tipo de los elementos devueltos. Aqu, lo importante es que, en LINQ, la propia

La variable de consulta slo almacena los comandos de la consulta. La ejecucin real de la consulta se aplaza hasta que se procese una iteracin en la variable de consulta, en una instruccin foreach. Este concepto se conoce como ejecucin diferida y se muestra en el ejemplo siguiente:
// Query execution. foreach (int num in numQuery) { Console.Write("{0,1} ", num); }

Dado que la propia variable de consulta nunca contiene los resultados de la consulta, se puede ejecutar tantas veces como se desee. Por ejemplo, puede que una aplicacin independiente actualice continuamente una base de datos. En su aplicacin, podra crear una consulta que recuperase los datos ms recientes, y podra ejecutarla repetidamente cada cierto tiempo para recuperar cada vez resultados diferentes.

Lin - Q

4.3.2 Forzar la ejecucin inmediata Las consultas que realizan funciones de agregacin en un intervalo de elementos de origen primero deben recorrer en iteracin dichos elementos. Algunos ejemplos de esas consultas son Count, Max, Average y First. Se ejecutan sin una instruccin foreach explcita porque la propia consulta debe utilizar foreach para devolver un resultado. Debe saber tambin que estos tipos de consultas devuelven un solo valor, no una coleccin IEnumerable. La consulta siguiente devuelve un recuento de los nmeros pares de la matriz de origen:
var evenNumQuery = from num in numbers where (num % 2) == 0 select num; int evenNumCount = evenNumQuery.Count();

5 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 tenemos unos cuantos ejemplos que muestran tareas comunes con datos: 5.1 Consultando Products De La Base De

Datos El siguiente cdigo usa una consulta LINQ para obtener una secuencia IEnumerable de objetos Product. Este cdigo est consultando a travs de la relacin Product/Category para obtener aquellos productos de la categora Beverages. C#:

Para forzar la ejecucin inmediata de cualquier consulta y almacenar en memoria cach sus resultados, puede llamar al mtodo ToList() o ToArray().
List<int> numQuery2 = (from num in numbers where (num % 2) == 0 select num).ToList(); // or like this: // numQuery3 is still an int[] var numQuery3 = (from num in numbers where (num % 2) == 0 select num).ToArray(); 5

5.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:

Lin - Q

5.4 Borar productos de la base de datos. El cdigo siguiente muestra cmo borrar todos los productos Toy de la base de datos: C#: 5.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. 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: C#:

6 OPERADORES
ESTNDAR

DE

CONSULTA

Los operadores de consulta estndar son los mtodos que forman el modelo de LanguageIntegrated Query (LINQ). La mayora de estos mtodos funciona en secuencias, donde una secuencia es un objeto cuyo tipo implementa la interfaz IEnumerable() proporcionan o la interfaz de IQueryable(). Los operadores de consulta estndar capacidades consulta que incluyen filtrado, proyeccin, agregacin, ordenacin y otras. Hay dos conjuntos de operadores de consulta estndar de LINQ, uno que funciona sobre objetos de tipo IEnumerable() y otro que funciona sobre objetos de tipo IQueryable(). Los mtodos que constituyen cada conjunto son miembros estticos de las clases Enumerable y Queryable, respectivamente. Se definen como mtodos de extensin del

Lin - Q

tipo sobre el que operan. Esto significa que se pueden llamar utilizando sintaxis del mtodo esttico o sintaxis del mtodo de instancia. Adems, varios mtodos de operador de consulta distintos estndar de los o funcionan que se IQueryable(). con basan El tipos en tipo

En contraste, los mtodos que extienden IQueryable() no de se implementan consulta, va a cualquier sino realizar. que El comportamiento la consulta que

generan un rbol de expresin que representa procesamiento de la consulta es administrado por el objeto IQueryable() del origen. Las llamadas a mtodos de consulta se pueden encadenar juntas en una sola consulta, lo cual permite hacer consultas arbitrariamente complejas.

IEnumerable()

Enumerable define dos de esos mtodos, que operan sobre objetos de tipo IEnumerable. Estos mtodos, Cast() y OfType(), permiten que una coleccin no parametrizada, o no genrica, pueda ser consultada en el modelo de LINQ. Los operadores de consulta estndar difieren en el momento de su ejecucin, dependiendo de si devuelven un valor singleton o una secuencia de valores. Los mtodos que devuelven un valor singleton (por ejemplo, Average y Sum) se ejecutan inmediatamente. Los mtodos que devuelven una secuencia retrasan la ejecucin de la consulta y devuelven un objeto enumerable. En el caso de los mtodos que operan sobre colecciones en memoria, es decir, aquellos mtodos que extienden IEnumerable(), el objeto enumerable devuelto captura los argumentos que se pasaron al mtodo. Cuando se enumera ese objeto, se emplea la lgica del operador de consulta y se devuelven los resultados de la consulta.

7 LA

POTENCIA

DE

LINQ

SOBRE

JAVASCRIPT

Figura 2: LInQ sobre JvaScript

Tener un lenguaje que me abstraiga de las particularidades de la fuente de datos y que me permita realizar las mismas operaciones en diferentes sistemas sin tener que cambiar la sintaxis ni la gramtica, es de gran valor en estos momentos. El primer paso es crear un proyecto del tipo MVC3.

Lin - Q

Una vez creado el mismo abro mi gestor de paquetes NuGet y busco por el trmino linq.js, salindome las tres libreras que han publicado: el core, el plugin para jQuery y la de Bindings. Como lo estoy haciendo por NuGet no debo preocuparme por la instalacin de los pre-requisitos, como es el tener instalado jQuery en el caso del plugin. Lo hace solo el sistema y me crea las referencias. Por ltimo abro la vista de Index.cshtml y creo la referencia a la biblioteca javascript. Esto lo podra poner en el ViewStart del proyecto, pero por comodidad para hacer las pruebas la he puesto en local.
<script src="../../Scripts/linq.js" type="text/javascript"></script>

// Realizo un ForEach y lanzo un alert por cada miembro del array Enumerable.From(lista).ForEach(functio n(i) {alert(i);});

De

esta

pieza

de

cdigo

saco

varias

conclusiones. La integracin con Visual Studio 2010 es muy buena y el Intellisense tambin. Lo nico que hay que tener cuidado es que estamos trabajando en JavaScript y este es sensible a las Maysculas. Por lo cual el mtodo ForEach, lo encuentra, pero forEach no. Pero quiero hacer algo sencillito que sea ms cercano a lo que se hacer en Linq y por ello selecciono los miembros del array que sean igual o mayores que tres y lo cargo en otra variable. A continuacin lanzo una alerta en donde visualizo el nmero de miembros que contiene esta nueva variable.
var lista = [1, 2, 3, 4, 5]; // Cargo los datos en un array // Selecciono los miembro del array que cumplen la condicin y los cargo en una variable var numero = Enumerable.From(lista) .Where(p => p > 3) .Select(); // Visualizo el nmero de miembro de la variable numero. alert(El nmero total de unidades mayor o igual que 3 es: + numero.Count());

Para probar como funciona primero creo una variable en donde cargo un array de nmeros. As ya tengo el repositorio de datos al que atacar.
var lista = [1, 2, 3, 4, 5]; // Cargo los datos enun array

A continuacin replico uno de los ejemplos que hay en los vdeos del proyecto en donde utilizo un objeto Enumerable para realizar un bucle por todos los miembros del array de datos y lanzo una funcin que me muestra una alerta con el valor de miembro.
var lista = [1, 2, 3, 4, 5]; // Cargo los datos en un array

Lin - Q

8 CONCLUSIONES
LinQ es una herramienta que se ha convertido en indispensable para los desarrolladores hoy en dia, ya que su modelo de programacin permite la unificacin de diferentes dominios para la gestin de datos. LinQ permite gran flexibilidad en

[2] Ejemplos de LINQ en C#

ltima actualizacin: Noviembre 2007 http://msdn.microsoft.com/eses/library/bb397965%28v=vs.90%29.aspx


[3] Applying LINQ to new data types

ltima actualizacin: Septiembre del 2011 http://geeks.ms/blogs/ohernandez/


[4] How to: Create a LINQ Project

cuanto a su performance, permitiendo gestionar datos desde cualquier lenguaje de programacin, existiendo Linq to XML, LinQ to DataSource, etc siendo el ms popular LinQ to SQL; el cual permite modelar la capa de datos de nuestras aplicaciones de una forma simple y limpia. Una vez definido nuestro modelo de datos, podemos realizar consultas, inserciones, actualizaciones y borrados sobre ella de forma fcil y eficiente. LINQ to SQL controla la comunicacin con la base de datos.

http://msdn.microsoft.com/enus/library/bb546156.aspx
[5] Usando LINQ to SQL

ltima actualizacin : Mayo 2007 http://speakingin.net/2007/05/20/usandolinq-to-sql-1%C2%AA-parte/


[6] LINQ. que es y como usuarlo.

ltima actualizacin: Septiembre 2007 http://alexjimenez.wordpress.com/2007/09/10/l inq-definicion-como-usarlo/ [7] Introduccin a las consultas LINQ (C#) http://msdn.microsoft.com/eses/library/bb397906.aspx

9 REFERENCIAS
[1] Introduction of LinQ for VS 2010

[8] Que es LINQ? ltima actualizacin: Enero del 2010 http://www.esasp.net/2009/07/linqintroduccion.html [9] Utilizando LINQ Mapping con WCF en Visual Studio 2010 (ASP.NET C#)

ltima actualizacin: Enero del 2010. http://neshu.blogspot.com/2010/01/introducti on-of-linq-for-vs-2010.html

Lin - Q

ltima actualizacin: Agosto del 2010 http://mredison.wordpress.com/2010/08/05/util izando-linq-mapping-con-wcf-en-visual-studio2010-asp-net-c-parte-2/ [10] La potencia de Linq sobre JavaScript ltima actualizacin: Julio del 2011 http://www.genbetadev.com/desarrollo-web/lapotencia-de-linq-sobre-javascript [11] Cmo: Crear un proyecto con LINQ http://msdn.microsoft.com/eses/library/bb546156.aspx

10

You might also like