Lin-q Paper Majo
-
Upload
maria-jose-chavez-estrada -
Category
Documents
-
view
213 -
download
0
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]
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/