Lin-q Paper Majo

download Lin-q Paper Majo

of 11

Transcript of Lin-q Paper Majo

  • 7/31/2019 Lin-q Paper Majo

    1/11

    LIN Q

    INGENIERA DE SISTEMAS

    PROYECTOS 1

    PRESENTADO POR:MARA JOS CHVEZ ESTRADA

    Cajamarca, Abril Del 2012

    DOCENTE:ING. SAMUEL MESTANZA ALCNTARA

  • 7/31/2019 Lin-q Paper Majo

    2/11

    Lin - Q.

    1

    Mara Jos Chvez Estrada e-mail: [email protected]

    [email protected]

    En este docum ento 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

    caract ersticas 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.

    : LINQ, SQL, XML, consultas,

    gestin de datos .

    1

    Hay que recorda r que seg n WikipediaLanguage 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 fueronoriginalmente probados en C, 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

    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

    LINQ es un conjunto de extensiones de

    lenguaje aadidas a C # y VB.NET.Proporciona un modelo de programacinunificado a los dominios de datos diferentes

    para la gestin de datos.

    Los desarrolladores pueden usar LINQ concualquier fuente de datos. Pueden expresar

    consultas eficientemente en los lenguajes de

    programacin que elijan, opcionalmentetransformar/incrustar los resultados de las

    consultas en el formato que quieran, y

    entonces manip ular fcilmente los resultados.

    Los lenguajes habilitados para LINQ puedenaportar seguridad de tipos y chequeo en

    tiempo de compilacin el las expresiones deconsulta, y desarrollar herramientas que

    aporten intelisense, debugging, y un gran

  • 7/31/2019 Lin-q Paper Majo

    3/11

    Lin - Q.

    2

    soporte para refactoring cuando escriban

    cdigo de LINQ.

    LINQ soporta un modelo de extensibilidad

    muy rico que facilita la creacin de operadoreseficientes para fuentes de datos. La versinOrcas del .NET Framework viene conlibreras que habilitan LINQ sobreobjetos,XML y bases de datos.

    3

    El propsito de LINQ es agregar capacidadesde 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 deextensin, tipos annimos, mtodos ann imosy expresiones lambda.

    Una consulta es una expresin que recuperadatos 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

    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 s ituacin alproporcionar un modelo coherente para

    trabajar con los datos de varios tipos de

    formatos y orgenes de datos. En una consultaLINQ, siempre se trabaja con objetos. Se

    utilizan los mismos modelos de codificacinbsicos para consultar y transformar datos dedocumentos XML, bases de datos SQL,

    conjuntos de datos ADO.NET, colecciones

    .NET y cualquier otro formato para el que

    haya disponible un proveedor LINQ.

    4

    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.

    En el ejemplo siguiente se muestra cmo seexpresan las tres partes de una operacin deconsulta en el cdigo fuente. En el ejemplo seutiliza por comodidad una matriz de enteros

    como origen de datos, pero los mismos

    conceptos se aplican a otros orgenes d edatos.

    class IntroToLINQ{

    static void Main(){

    // The Three Parts of a LINQQuery:

    // 1. Data source. int [] numbers = new int [7] {

    0, 1, 2, 3, 4, 5, 6 };

  • 7/31/2019 Lin-q Paper Majo

    4/11

    Lin - Q.

    3

    // 2. Query creation. // numQuery is an

    IEnumerable var numQuery =

    from num in numberswhere (num % 2) == 0select num;

    // 3. Query execution. foreach ( int num in numQuery){

    Console.Write( "{0,1} " ,num);

    }}

    }

    En la siguiente ilustracin se muestra laoperacin de consulta completa. En LINQ, laejecucin de la consulta es distinta de lapropia consulta; en otras palabras, no se

    recuperan datos con la simple creacin de lavariable de consulta.

    En el ejemplo anterior, como el origen de

    datos es una matriz, se admite implcitamente

    la interfaz genrica IEnumerable(). Este hechoimplica que se puede consultar con LINQ. Una

    consulta se ejecuta en una instruccin foreachy foreach necesita IEnumerable o

    IEnumerable(). Los tipos que admiten

    IEnumerable() o una interfaz derivada, como

    la genrica IQueryable(), se denominan tiposconsultables.

    Un tipo que se puede consultar no requiere

    ninguna modificacin o tratamiento especialpara servir como origen de datos LINQ. Si los

    datos de origen an no estn en memoriacomo 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 XMLdocument. // using System.Xml.Linq; XElement contacts =XElement.Load( @"c:\myContactList.xml" );

    Con LINQ to SQL, primero se crea unaasignacin relacional de objetos en tiempo dediseo, ya sea manualmente o mediante elObject Relational Designer. Despus, seescriben las consultas en los objetos y, en

    tiempo de ejecucin, LINQ to SQL controla lacom unicacin con la base de datos. En el

    http://void%280%29/
  • 7/31/2019 Lin-q Paper Majo

    5/11

    Lin - Q.

    4

    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 = newNorthwnd(@"c:\northwnd.mdf");

    // Query for customers in London.IQueryable custQuery =

    from cust in db.Customerswhere cust.City == "London"select cust;

    Sin embargo, la regla bsica es muy simple:un origen de datos LINQ es cualquier objeto

    que admite la interfaz gen rica IEnumerable()o una interfaz que herede de ella.

    La consulta especifica qu informacin se vaa recuperar de uno o varios orgenes dedatos. Opcionalmente, una consulta tambinespecifica cmo debera ordenarse, agruparsey 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 laescritura de consultas, C# incluye nueva

    sintaxis de consulta.

    La expresin de consulta contiene tresclusulas: . La clusula

    especifica el origen de datos, la clusula aplica el filtro y la clusula

    especifica el tipo de los elementos devueltos.

    Aqu, lo importante es que, en LINQ, la propia

    variable de consulta no realiza ninguna accinni devuelve datos. Simplemente almacena la

    informacin necesaria para generar losresultados cuando la consulta se ejecute

    posteriormente.

    4.3

    4.3.1

    La variable de consulta slo almacena loscomandos de la consulta. La ejecucin real

    de la consulta se aplaza hasta que seprocese una iteracin en la variable deconsulta, en una instruccin foreach. Esteconcepto se conoce como ejecucin diferiday 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 suaplicacin, podra crear una consulta querecuperase los datos ms recientes, ypodra ejecutarla repetidamente cada ciertotiempo para recuperar cada vez resultados

    diferentes.

    http://void%280%29/http://void%280%29/http://void%280%29/http://void%280%29/
  • 7/31/2019 Lin-q Paper Majo

    6/11

    Lin - Q.

    5

    Las consultas que realizan funciones

    de agregacin en un intervalo deelementos de origen primero deben

    recorrer en iteracin dichos elementos. Algunos ejemplos de esas consultas

    son . Se

    ejecutan sin una instruccinexpl cita porque la propia consultadebe utilizar para devolver un

    resultado. Debe saber tambin queestos tipos de consultas devuelven un

    solo valor, no una coleccinIEnumerable. La consulta siguiente

    devuelve un recuento de los nmerospares de la matriz de origen:

    var evenNumQuery =from num in numberswhere (num % 2) == 0

    select num;

    int evenNumCount =evenNumQuery.Count();

    Para forzar la ejecucin inmediata decualquier consulta y almacenar en

    memoria cach sus resultados, puedellamar al mtodo ToList() o ToArray().

    List< int > numQuery2 =

    ( from num in numberswhere (num % 2) == 0select num).ToList();

    // or like this: // numQuery3 is still an int[]

    var numQuery3 =( from num in numbers

    where (num % 2) == 0select num).ToArray();

    5

    Una vez que hemos modelado nuestra base

    de datos con el diseador de LINQ to SQL,

    podemos escribir cdigo fcilmente paratrabajar con l. Aqu tenemos unos cuantosejemplos que muestran tareas comunes con

    datos:

    El siguiente cdigo usa una consulta LINQpara obtener una secuencia IEnumerable de

    objetos Product. E ste cdigo est consultandoa travs de la relacin Product/Category paraobtener aquellos productos de la categoraBeverages.

    C#:

    El cdigo siguiente muestra cmo obtener unproducto de la base de datos, actualizar su

    precio, y guardar los cambios en la base de

    datos:

  • 7/31/2019 Lin-q Paper Majo

    7/11

    Lin - Q.

    6

    5.3

    El siguiente cdigo muestra cmo crear unanueva categora, y entonces crear dos nuevosproductos y asociarlos a la nueva categora.

    Los tres son despus guardados en la basede datos.

    No necesitamos administrar manualmente las

    relaciones primarykey/foreignkey. Slotenemos que aadir los objetos Product en lacoleccin Products de la categora, y luegoaadir el nuevo objeto Category en la

    coleccin de Categories del DataContext,LINQ to SQL sabr automticamente crear lasPF/FK necesarias:

    C#:

    5.4

    El cdigo siguiente muestra cmo borrar todoslos productos Toy de la base de datos:

    C#:

    6

    Los operadores de consulta estndar son losmtodos que forman el modelo de Language -Integrated Query (LINQ). La mayora de estosmtodos funciona en secuencias, donde unasecuencia es un objeto cuyo tipo implementa

    la interfaz o la interfaz

    Los operadores de consulta

    estndar proporcionan capacidades deconsulta que incluyen filtrado, proyeccin,agregacin, ordenacin y otras.

    Hay dos conjuntos de operadores de consulta

    estndar de LINQ, uno que funciona sobreobjetos de tipo y otro que

    funciona sobre objetos de tipo

    Los mtodos que constituyen cada conjuntoson miembros estticos de las clases

    y , respectivamente.

    Se definen como mtodos de extensin del

  • 7/31/2019 Lin-q Paper Majo

    8/11

    Lin - Q.

    7

    tipo sobre el que operan. Esto significa que se

    pueden llamar utilizando sintaxis del mtodoesttico o sintaxis del mtodo de instancia.

    Adems, varios mtodos de operador deconsulta estndar funcionan con tiposdistintos de los que se basan en

    o El tipo

    Enumerable define dos de esos mtodos, queoperan sobre objetos de tipo IEnumerable.

    Estos mtodos, y permitenque una coleccin no parametrizada, o nogenrica, pueda ser consultada en el modelode LINQ.

    Los operadores de consulta estndar difie renen el momento de su ejecucin, dependiendode si devuelven un valor singleton o una

    secuencia de valores. Los mtodos quedevuelven un valor singleton (por ejemplo,

    ) se ejecutan inmediatamente.

    Los mtodos que devuelven una secuenciaretrasan la ejecucin de la consulta ydevuelven un objeto enumerable.

    En el ca so de los mtodos que operan sobrecolecciones en memoria, es decir, aquellos

    mtodos que extienden elobjeto enumerable devuelto captura los

    argumentos que se pasaron al mtodo. Cuando se enumera ese objeto, se emplea la

    lgica del operador de consulta y sedevuelven los resultados de la consulta.

    En contraste, los mtodos que extiendenno implementan cualquier

    comportamiento de consulta, sino que

    generan un rbol de expresin que representala consulta que se va a realizar. El

    procesamiento de la consulta es administrado

    por el objeto del origen.

    Las llamadas a mtodos de consulta sepueden encadenar juntas en una sola

    consulta, lo cual permite hacer consultas

    arbitrariamente complejas.

    7

    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 enestos momentos.

    El primer paso es crear un proyecto del tipo

    MVC3.

  • 7/31/2019 Lin-q Paper Majo

    9/11

    Lin - Q.

    8

    Una vez creado el mismo abro mi gestor de

    paquetes NuGet y busco por el trminolinq.js, salindome las tres libreras que hanpublicado: 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 eltener 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 creola 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.

    Para probar como funciona primero creo una

    variable en donde cargo un array de nmeros.As ya tengo el repositorio de datos al queatacar.

    var lista = [1, 2, 3, 4, 5]; //Cargo los datos enun array

    A continuacin replico uno de los ejemplosque hay en los vdeos del proyecto en dondeutilizo un objeto para realizar un

    bucle por todos los miembros del array de

    datos y lanzo una funcin que me muestrauna alerta con el valor de miembro.

    var lista = [1, 2, 3, 4, 5]; //Cargo los datos en un array

    // Realizo un ForEach y lanzo unalert por cada miembro del array

    Enumerable.From(lista).ForEach(function(i)

    {alert(i);});

    De esta pieza de cdigo saco variasconclusiones. La integracin con Visual Studio2010 es muy buena y el Intellisense tambin.Lo nico que hay que tener cuidado es queestamos trabajando en JavaScript y este es

    sensible a las Maysculas. Por lo cual elmtodo ForEach, lo encuentra, pero forEach

    no.

    Pero quiero hacer algo sencillito que sea mscercano 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 endonde 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 delarray que cumplen la condicin y loscargo en una variable

    var numero =Enumerable.From(lista)

    .Where ( p => p > 3 )

    .Select();

    // Visualizo el nmero de miembrode la variable numero.

    alert ( El nmero total de unidadesmayor o igual que 3 es: +numero.Count());

  • 7/31/2019 Lin-q Paper Majo

    10/11

    Lin - Q.

    9

    8

    LinQ es una herramienta que se ha

    convertido en indispensable para los

    desarrolladores hoy en dia, ya que sumodelo de programacin permite launificacin de diferentes dominios parala gestin de datos.

    LinQ permite gran flexibilidad en

    cuanto a su performance, permitiendo

    gestionar datos desde cualquier

    lenguaje de programacin, existiendoLinq to XML, LinQ to DataSource, etc

    siendo el ms popular LinQ to SQL; elcual 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 ellade forma fcil y eficiente.

    LINQ to SQL controla la comunicacincon la base de datos.

    9

    [1] Introduction of LinQ for VS 2010

    ltima actualizacin: Enero del 2010.http://neshu.blogspot.com/2010/01/introducti

    on-of-linq-for-vs-2010.html

    [2] Ejemplos de LINQ en C#

    ltima actualizacin: Noviembre 2007 http://msdn.microsoft.com/es-

    es/library/bb397965%28v=vs.90%29.aspx

    [3] Applying LINQ to new data types

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

    [4] How to: Create a LINQ Project

    http://msdn.microsoft.com/en-

    us/library/bb546156.aspx

    [5] Usando LINQ to SQL

    ltima actualizacin :Mayo 2007http://speakingin.net/2007/05/20/usando-

    linq-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/es-

    es/library/bb397906.aspx

    [8] Que es LINQ?

    ltima actualizacin: Enero del 2010 http://www.esasp.net/2009/07/linq-

    introduccion.html

    [9] Utilizando LINQ Mapping con WCF en

    Visual Studio 2010 (ASP.NET C#)

    http://neshu.blogspot.com/2010/01/introduction-of-linq-for-vs-2010.htmlhttp://neshu.blogspot.com/2010/01/introduction-of-linq-for-vs-2010.htmlhttp://neshu.blogspot.com/2010/01/introduction-of-linq-for-vs-2010.htmlhttp://msdn.microsoft.com/es-es/library/bb397965%28v=vs.90%29.aspxhttp://msdn.microsoft.com/es-es/library/bb397965%28v=vs.90%29.aspxhttp://msdn.microsoft.com/es-es/library/bb397965%28v=vs.90%29.aspxhttp://geeks.ms/blogs/ohernandez/http://geeks.ms/blogs/ohernandez/http://msdn.microsoft.com/en-us/library/bb546156.aspxhttp://msdn.microsoft.com/en-us/library/bb546156.aspxhttp://msdn.microsoft.com/en-us/library/bb546156.aspxhttp://speakingin.net/2007/05/20/usando-linq-to-sql-1%C2%AA-parte/http://speakingin.net/2007/05/20/usando-linq-to-sql-1%C2%AA-parte/http://speakingin.net/2007/05/20/usando-linq-to-sql-1%C2%AA-parte/http://alexjimenez.wordpress.com/2007/09/10/linq-definicion-como-usarlo/http://alexjimenez.wordpress.com/2007/09/10/linq-definicion-como-usarlo/http://alexjimenez.wordpress.com/2007/09/10/linq-definicion-como-usarlo/http://msdn.microsoft.com/es-es/library/bb397906.aspxhttp://msdn.microsoft.com/es-es/library/bb397906.aspxhttp://msdn.microsoft.com/es-es/library/bb397906.aspxhttp://www.esasp.net/2009/07/linq-introduccion.htmlhttp://www.esasp.net/2009/07/linq-introduccion.htmlhttp://www.esasp.net/2009/07/linq-introduccion.htmlhttp://www.esasp.net/2009/07/linq-introduccion.htmlhttp://www.esasp.net/2009/07/linq-introduccion.htmlhttp://msdn.microsoft.com/es-es/library/bb397906.aspxhttp://msdn.microsoft.com/es-es/library/bb397906.aspxhttp://alexjimenez.wordpress.com/2007/09/10/linq-definicion-como-usarlo/http://alexjimenez.wordpress.com/2007/09/10/linq-definicion-como-usarlo/http://speakingin.net/2007/05/20/usando-linq-to-sql-1%C2%AA-parte/http://speakingin.net/2007/05/20/usando-linq-to-sql-1%C2%AA-parte/http://msdn.microsoft.com/en-us/library/bb546156.aspxhttp://msdn.microsoft.com/en-us/library/bb546156.aspxhttp://geeks.ms/blogs/ohernandez/http://msdn.microsoft.com/es-es/library/bb397965%28v=vs.90%29.aspxhttp://msdn.microsoft.com/es-es/library/bb397965%28v=vs.90%29.aspxhttp://neshu.blogspot.com/2010/01/introduction-of-linq-for-vs-2010.htmlhttp://neshu.blogspot.com/2010/01/introduction-of-linq-for-vs-2010.html
  • 7/31/2019 Lin-q Paper Majo

    11/11

    Lin - Q.

    10

    ltima actualizacin: Agosto del 2010 http://mredison.wordpress.com/2010/08/05/util

    izando-linq-mapping-con-wcf-en-visual-studio-

    2010-asp-net-c-parte-2/

    [10] La potencia de Linq sobre JavaScript

    ltima actualizacin: Julio del 2011 http://www.genbetadev.com/desarrollo-web/la-

    potencia-de-linq-sobre-javascript

    [11] Cmo: Crear un proyecto con LINQ http://msdn.microsoft.com/es-

    es/library/bb546156.aspx

    http://mredison.wordpress.com/2010/08/05/utilizando-linq-mapping-con-wcf-en-visual-studio-2010-asp-net-c-parte-2/http://mredison.wordpress.com/2010/08/05/utilizando-linq-mapping-con-wcf-en-visual-studio-2010-asp-net-c-parte-2/http://mredison.wordpress.com/2010/08/05/utilizando-linq-mapping-con-wcf-en-visual-studio-2010-asp-net-c-parte-2/http://mredison.wordpress.com/2010/08/05/utilizando-linq-mapping-con-wcf-en-visual-studio-2010-asp-net-c-parte-2/http://www.genbetadev.com/desarrollo-web/la-potencia-de-linq-sobre-javascripthttp://www.genbetadev.com/desarrollo-web/la-potencia-de-linq-sobre-javascripthttp://www.genbetadev.com/desarrollo-web/la-potencia-de-linq-sobre-javascripthttp://msdn.microsoft.com/es-es/library/bb546156.aspxhttp://msdn.microsoft.com/es-es/library/bb546156.aspxhttp://msdn.microsoft.com/es-es/library/bb546156.aspxhttp://msdn.microsoft.com/es-es/library/bb546156.aspxhttp://msdn.microsoft.com/es-es/library/bb546156.aspxhttp://www.genbetadev.com/desarrollo-web/la-potencia-de-linq-sobre-javascripthttp://www.genbetadev.com/desarrollo-web/la-potencia-de-linq-sobre-javascripthttp://mredison.wordpress.com/2010/08/05/utilizando-linq-mapping-con-wcf-en-visual-studio-2010-asp-net-c-parte-2/http://mredison.wordpress.com/2010/08/05/utilizando-linq-mapping-con-wcf-en-visual-studio-2010-asp-net-c-parte-2/http://mredison.wordpress.com/2010/08/05/utilizando-linq-mapping-con-wcf-en-visual-studio-2010-asp-net-c-parte-2/