SlideShare una empresa de Scribd logo
LINQ
(Language-Integrated Query)
     Gabriel Espinoza Erices
        2012 – 03 – 15
INTRODUCCIÓN
• LINQ es una innovación para disminuir la
  brecha entre el mundo de los objetos y el
  mundo de los datos.
INTRODUCCIÓN
• En Visual Studio, se pueden escribir consultas
  LINQ en VB o C# con:
  – Bases de datos SQL Server (Linq to SQL)
  – Documentos XML (Linq to XML)
  – DataSets ADO.NET (Linq to DataSet)
  – Colecciones de objetos que soporten IEnumerable
    o IEnumerable<T>

• Requiere .NET Framework 3.5+
QUERYABLE TYPES
• Los tipos que soportan IEnumerable<T> o derivan
  de interfaces como IQueryable<T> son llamados
  Queryable Types

• Un objeto “queryable type” no requiere
  modificación ni trato especial para servir como
  datasource de LINQ.

• Si los datos orígenes no están en memoria como
  “queryable type”, el proveedor de LINQ debe
  representarlo como si estuviera.
LINQ TO SQL COMO QUERYABLE TYPE
Con LINQ to
SQL, primero se crea un
mapeo objeto-relacional
en tiempo de diseño, se
crean las querys contra
esos objetos. Luego en
tiempo de
ejecución, LINQ to SQL
maneja la comunicación
con la base de datos.
LA QUERY
• La query especifica qué información obtener de una o varias
  fuentes. Opcionalmente la query también puede especificar
  como esos datos deben ser ordenados, agrupados y formados
  antes de ser retornada.

• Una query tiene 3 clausulas:
   – from: Especifica el data source
   – where: aplica el filtro
   – select: especifica el tipo de los elementos retornados.
EJECUCIÓN DE LA QUERY
            La query por si misma no ejecuta
            ninguna acción ni retorna datos. Solo
            almacena la información requerida para
            producir los resultados cuando la
            consulta sea ejecutada en un punto
            posterior.
FORZAR EJECUCIÓN INMEDIATA
•   Las querys que realizan
    funciones de agregado sobre
    un rango de fuentes, primero
    deben iterar sobre esos
    elementos. Ej:
    Count, Max, Average, First, e
    tc. Notar que estas consultas
    no retornan una
    colección, sino que un valor.

•   Para forzar la ejecución
    inmediata de cualquier
    query y almacenar en cache
    sus resultados, se pueden
    usar el ToList<T> o
    ToArray<T>
SINTAXIS

           Son equivalentes
OPERACIONES BÁSICAS
                                                       Range Variable
                         Delcaración del
                         DataSource
                                                                        DataSource




Declaración de filtros                     Da “forma” al resultado
                                           de la query
ORDER BY & JOINS
                                      Ordenamiento




Un join crea
asociaciones entre
secuencias que no
estén explicitamente
modeladas en los
DataSources. En LINQ
los join SIEMPRE
funcionan contra
objetos y no tablas de
bases de datos
AGRUPAR
  Agrupar: Al
  agrupar, se forma
  una lista de listas.
La cláusula group permite
agrupar los resultados basados
en una llave que se especifique.
Ejemplo: Los resultados
agrupados por ciudad, de tal
manera que los clientes de
Londres o Paris son grupos
individuales. En este caso
cust.City es la llave.



                                         Si se necesita interactuar
                                         con el grupo, se puede
                                         usar into para crear una
                                         variable que lo referencie
CONSULTAS y TRANSFORMACIONES DE
         TIPOS DE DATO
LINQ y CLASES GENÉRICAS
• IEnumerable<T> es la interfaz que habilita que las
  colecciones de clases genéricas puedan ser
  enumeradas usando la sentencia foreach. Las
  colecciones de clases genéricas soportan
  IEnumerable<T> tal como las colecciones no
  genéricas (arraylists).
• Cuando veas que una query está escripta como
  IEnumerable<Customer>, significa que la
  query, cuando sea ejecutada, producirá una
  secuencia de 0 o más objetos Customer.
LINQ y CLASES GENÉRICAS




Se puede dejar que el
compilador maneje la
declaración genérica.
POR QUÉ LINQ VENCE A SQL
                              SELECT UPPER(Name)
Supongamos queremos           FROM Customer
hacer una consulta simple     WHERE Name LIKE 'A%'
                              ORDER BY Name



                              SELECT UPPER(Name) FROM
Ahora supongamos que          (
estos resultados están          SELECT *, RN = row_number()
alimentando una página          OVER (ORDER BY Name)
web y queremos obtener          FROM Customer
solo las filas 21-30. De la     WHERE Name LIKE 'A%'
nada, ahora necesitamos       )A
una subquery                  WHERE RN BETWEEN 21 AND 30
                              ORDER BY Name
POR QUÉ LINQ VENCE A SQL
Y si necesitamos agregar      SELECT TOP 10 UPPER (c1.Name)
soporte para bases de datos   FROM Customer c1
anteriores a SQL SERVER       WHERE
2005, se vuelve peor aún!!     c1.Name LIKE 'A%'
                               AND c1.ID NOT IN
                               (
                                 SELECT TOP 20 c2.ID
                                 FROM Customer c2
No solo es complicado, sino      WHERE c2.Name LIKE 'A%'
que viola el principio DRY       ORDER BY c2.Name
(Don’t Repeat Yourself)        )
                              ORDER BY c1.Name
POR QUÉ LINQ VENCE A SQL
SELECT TOP 10 UPPER (c1.Name)
FROM Customer c1
WHERE                                     var query = from c in db.Customers
 c1.Name LIKE 'A%'
 AND c1.ID NOT IN                                     where c.Name.StartsWith("A")
 (
   SELECT TOP 20 c2.ID                                orderby c.Name
   FROM Customer c2                                   select c.Name.ToUpper();
   WHERE c2.Name LIKE 'A%'
   ORDER BY c2.Name                       var thirdPage = query.Skip(20).Take(10);
 )
ORDER BY c1.Name


                                                  Aquí tenemos la misma
                                                  consulta pero en LINQ. La
                                                  ganancia en simplicidad es
                                                  clara.
                                          IQueryable<T> Paginate<T> (this IQueryable<T> query,
                                             int skip, int take)
            Composability: Podemos        {
            dividir la consulta y hacer       return query.Skip(skip).Take(take);
            métodos genéricos             }
            reutilizables                 var thirdPage = query.Paginate (20, 10);
SELECT p.*
FROM Purchase p
  LEFT OUTER JOIN
    Customer c INNER JOIN Address a ON c.AddressID = a.ID
  ON p.CustomerID = c.ID
WHERE
 (a.State = 'WA' || p.CustomerID IS NULL)
  AND p.ID in
  (
    SELECT PurchaseID FROM PurchaseItem                     Otro beneficio de LINQ es que
    GROUP BY PurchaseID HAVING SUM (SaleAmount) > 1000      puedes consultar a través de
  )
                                                            relaciones sin tener que hacer
                                                            joins.




var purchases = from p in db.Purchases
                where p.Customer.Address.State == "WA“ || p.Customer == null
                where p.PurchaseItems.Sum(pi => pi.SaleAmount) > 1000
                select p;
Parametrización: No hay que complicarse con los ataques de inyección de SQL pues la
parametrización de LINQ es inline, segura y altamente legible.


  IQueryable<Customer> GetCustomers (string state, decimal? minPurchase)
  {
    var query = Customers.AsQueryable();
    if (state != null)
         query = query.Where (c => c.Address.State == "WA");

      if (minPurchase != null)
          query = query.Where (c => c.Purchases.Any (p => p.Price > minPurchase.Value));

      return query;
  }



 SELECT [t0].[ID], [t0].[Name], [t0].[AddressID]
 FROM [Customer] AS [t0]
                                                             Si pasamos state y minPurchase nulos


 SELECT [t0].[ID], [t0].[Name], [t0].[AddressID]
 FROM [Customer] AS [t0]
 LEFT OUTER JOIN [Address] AS [t1] ON [t1].[ID] = [t0].[AddressID]   Si pasamos ambos valores LINQ no solo
 WHERE (EXISTS(
   SELECT NULL AS [EMPTY]                                            agregará los predicados, sino que
   FROM [Purchase] AS [t2]
   WHERE ([t2].[Price] > @p0) AND ([t2].[CustomerID] = [t0].[ID])
                                                                     también los JOINS
   )) AND ([t1].[State] = @p1)
Cuándo no usar LINQ
A pesar de su poder, LINQ no deja obsoleto a SQL.
Toma más del 95% de la funcionalidad de las
queries, pero se seguirá necesitando SQL para:
• Queries que busquen máxima optimización.
• Queries que involucren seleccionar en tablas
  temporales y luego consultar esas tablas.
• Actualizaciones con predicados e inserciones
  masivas (bulk)
• Triggers
Tener que conocer dos lenguajes para querys no
es realmente un problema, dado que de todas
maneras LINQ provee una forma común para
interactuar con distintas fuentes de datos.
Arreglos, Listas, XML, Bases de Datos, y en
general, de cualquier objeto que herede de
IQueryable y IEnumerable.
Fuentes
• http://msdn.microsoft.com/en-
  us/library/bb397933.aspx
• http://msdn.microsoft.com/en-
  us/library/bb397926.aspx
• http://www.codeproject.com/Articles/230380
  /LINQ-to-SQL-Advanced-Concepts-and-
  Features
• http://www.linqpad.net/WhyLINQBeatsSQL.as
  px

Más contenido relacionado

La actualidad más candente

Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
Scott Wlaschin
 
Indexes and Indexing in Oracle 12c
Indexes and Indexing in Oracle 12cIndexes and Indexing in Oracle 12c
Indexes and Indexing in Oracle 12c
Oren Nakdimon
 
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Ryota Watabe
 
SQL UNION
SQL UNIONSQL UNION
SQL UNION
Ritwik Das
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
tobaru_yuta
 
『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!
『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!
『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!
株式会社クライム
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
Ryosuke Uchitate
 
реляційна алгебра лекция
реляційна алгебра лекцияреляційна алгебра лекция
реляційна алгебра лекцияvika_kopoty
 
Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...
Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...
Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...
Artem Chebotko
 
SQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics CoveredSQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics Covered
Danish Mehraj
 
SAP HANAのソースエンドポイントとしての利用
SAP HANAのソースエンドポイントとしての利用SAP HANAのソースエンドポイントとしての利用
SAP HANAのソースエンドポイントとしての利用
QlikPresalesJapan
 
The Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary VersionThe Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary Version
Philip Schwarz
 
SQL window functions for MySQL
SQL window functions for MySQLSQL window functions for MySQL
SQL window functions for MySQL
Dag H. Wanvik
 
Arbol binario de busqueda java
Arbol binario de busqueda   javaArbol binario de busqueda   java
Arbol binario de busqueda java
Franco Guamán
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
ssuser070fa9
 
Grafos avanzado
Grafos avanzadoGrafos avanzado
Grafos avanzado
menamigue
 
RDBでのツリー表現入門
RDBでのツリー表現入門RDBでのツリー表現入門
RDBでのツリー表現入門
Kent Ohashi
 

La actualidad más candente (20)

Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
 
Indexes and Indexing in Oracle 12c
Indexes and Indexing in Oracle 12cIndexes and Indexing in Oracle 12c
Indexes and Indexing in Oracle 12c
 
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
Introduction of Oracle Database Architecture(抜粋版) - JPOUG Oracle Database入学式 ...
 
SQL UNION
SQL UNIONSQL UNION
SQL UNION
 
Manual sql
Manual sqlManual sql
Manual sql
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!
『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!
『データベースのどこが問題?』を時間かけずにレスポンス・タイム分析(RTA)!
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
 
реляційна алгебра лекция
реляційна алгебра лекцияреляційна алгебра лекция
реляційна алгебра лекция
 
Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...
Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...
Using the Chebotko Method to Design Sound and Scalable Data Models for Apache...
 
SQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics CoveredSQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics Covered
 
SAP HANAのソースエンドポイントとしての利用
SAP HANAのソースエンドポイントとしての利用SAP HANAのソースエンドポイントとしての利用
SAP HANAのソースエンドポイントとしての利用
 
The Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary VersionThe Open-Closed Principle - the Original Version and the Contemporary Version
The Open-Closed Principle - the Original Version and the Contemporary Version
 
SQL window functions for MySQL
SQL window functions for MySQLSQL window functions for MySQL
SQL window functions for MySQL
 
Arbol binario de busqueda java
Arbol binario de busqueda   javaArbol binario de busqueda   java
Arbol binario de busqueda java
 
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Grafos avanzado
Grafos avanzadoGrafos avanzado
Grafos avanzado
 
RDBでのツリー表現入門
RDBでのツリー表現入門RDBでのツリー表現入門
RDBでのツリー表現入門
 

Destacado

Linq
LinqLinq
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQ
Tonymx
 
Linq
LinqLinq
Linq
samneang
 
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5google
 
LINQ for slideshare
LINQ for slideshareLINQ for slideshare
LINQ for slideshare
Ian Barrs
 
Ejemplo Linq To SQL
Ejemplo Linq To SQLEjemplo Linq To SQL
Ejemplo Linq To SQL
jcfarit
 
LINQ
LINQLINQ
Linq
LinqLinq
CORREOS ELECTRONICOS
CORREOS ELECTRONICOSCORREOS ELECTRONICOS
CORREOS ELECTRONICOS
imotep
 
Los Correos Electronicos
Los Correos ElectronicosLos Correos Electronicos
Los Correos Electronicos
Zaflowra
 
RECOMENDACIONES Y CONCLUSIONES
RECOMENDACIONES Y CONCLUSIONES RECOMENDACIONES Y CONCLUSIONES
RECOMENDACIONES Y CONCLUSIONES
Mari Bazurto
 
Conclusiones y recomendaciones
Conclusiones y recomendacionesConclusiones y recomendaciones
Conclusiones y recomendaciones
luz delia hernandez
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」
Yusuke Ando
 

Destacado (14)

Linq
LinqLinq
Linq
 
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQ
 
Linq
LinqLinq
Linq
 
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5
 
Framework .NET 3.5 10 Linq
Framework .NET 3.5 10 LinqFramework .NET 3.5 10 Linq
Framework .NET 3.5 10 Linq
 
LINQ for slideshare
LINQ for slideshareLINQ for slideshare
LINQ for slideshare
 
Ejemplo Linq To SQL
Ejemplo Linq To SQLEjemplo Linq To SQL
Ejemplo Linq To SQL
 
LINQ
LINQLINQ
LINQ
 
Linq
LinqLinq
Linq
 
CORREOS ELECTRONICOS
CORREOS ELECTRONICOSCORREOS ELECTRONICOS
CORREOS ELECTRONICOS
 
Los Correos Electronicos
Los Correos ElectronicosLos Correos Electronicos
Los Correos Electronicos
 
RECOMENDACIONES Y CONCLUSIONES
RECOMENDACIONES Y CONCLUSIONES RECOMENDACIONES Y CONCLUSIONES
RECOMENDACIONES Y CONCLUSIONES
 
Conclusiones y recomendaciones
Conclusiones y recomendacionesConclusiones y recomendaciones
Conclusiones y recomendaciones
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」
 

Similar a Programación con linq

13-Unidad 2. Operaciones Linq
 13-Unidad 2. Operaciones Linq 13-Unidad 2. Operaciones Linq
13-Unidad 2. Operaciones Linq
Luis Fernando Aguas Bucheli
 
13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT
13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT
13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT
Luis Fernando Aguas Bucheli
 
Sentencias SQL Cristian Benalcázar
Sentencias SQL Cristian BenalcázarSentencias SQL Cristian Benalcázar
Sentencias SQL Cristian Benalcázar
Cristian Benalcazar
 
S06.02 ETL BD - Datamart.pdf
S06.02 ETL BD - Datamart.pdfS06.02 ETL BD - Datamart.pdf
S06.02 ETL BD - Datamart.pdf
BrigithJaveMendoza
 
Objeto sqlcommand
Objeto sqlcommandObjeto sqlcommand
Objeto sqlcommand
jack grandez garcia
 
Precentacion de sql visual
Precentacion de sql visualPrecentacion de sql visual
Precentacion de sql visualBryanChacon12
 
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
SILVA19_PAMELA
 
OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.
SILVA19_PAMELA
 
Entrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETEntrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NET
Haaron Gonzalez
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
Carlos Hernando
 
Mysql es.11
Mysql es.11Mysql es.11
Mysql es.11
Miguel Angel Malaga
 
Ejercicios sql (1)
Ejercicios sql (1)Ejercicios sql (1)
Ejercicios sql (1)
Noemy Gutierrez
 
Linq to sql 3
Linq to sql 3Linq to sql 3
Linq to sql 3
jcfarit
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005oswchavez
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
carlos2025
 
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
SILVA19_PAMELA
 

Similar a Programación con linq (20)

Ti. Sql.Caso1al9.Consultas
Ti. Sql.Caso1al9.ConsultasTi. Sql.Caso1al9.Consultas
Ti. Sql.Caso1al9.Consultas
 
13-Unidad 2. Operaciones Linq
 13-Unidad 2. Operaciones Linq 13-Unidad 2. Operaciones Linq
13-Unidad 2. Operaciones Linq
 
13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT
13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT
13-Unidad 3: Operaciones LINQ -3.1 Introducción 3.2 LINQ SELECT 3.3 LINQ INSERT
 
Conexión a sql server con c#
Conexión a sql server con c#Conexión a sql server con c#
Conexión a sql server con c#
 
Sentencias SQL Cristian Benalcázar
Sentencias SQL Cristian BenalcázarSentencias SQL Cristian Benalcázar
Sentencias SQL Cristian Benalcázar
 
S06.02 ETL BD - Datamart.pdf
S06.02 ETL BD - Datamart.pdfS06.02 ETL BD - Datamart.pdf
S06.02 ETL BD - Datamart.pdf
 
Objeto sqlcommand
Objeto sqlcommandObjeto sqlcommand
Objeto sqlcommand
 
Precentacion de sql visual
Precentacion de sql visualPrecentacion de sql visual
Precentacion de sql visual
 
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
 
OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.
 
Entrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NETEntrenamiento en Acceso a Datos con ASP.NET
Entrenamiento en Acceso a Datos con ASP.NET
 
Bases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBCBases de Datos en Java - Intro a JDBC
Bases de Datos en Java - Intro a JDBC
 
Mysql es.11
Mysql es.11Mysql es.11
Mysql es.11
 
Ejercicios sql (1)
Ejercicios sql (1)Ejercicios sql (1)
Ejercicios sql (1)
 
Linq to sql 3
Linq to sql 3Linq to sql 3
Linq to sql 3
 
Ado.Net
Ado.NetAdo.Net
Ado.Net
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
 
Consultas-SQL.pdf
Consultas-SQL.pdfConsultas-SQL.pdf
Consultas-SQL.pdf
 
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
 

Último

DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
Ing. Julio Iván Mera Casas
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.pptTEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
SandroNava1
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
SERVANDOBADILLOPOLEN
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
juanchogame18
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
aljitagallego
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
AMADO SALVADOR
 
Todo sobre Minirobotica. Revista Saber Electronica
Todo sobre  Minirobotica. Revista Saber ElectronicaTodo sobre  Minirobotica. Revista Saber Electronica
Todo sobre Minirobotica. Revista Saber Electronica
Carlos Carlosnoemi
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 

Último (20)

DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.pptTEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
TEMA 2-CARPAS SOLARES PARA PRODUCCION DE HORTALIZAS.ppt
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
 
Todo sobre Minirobotica. Revista Saber Electronica
Todo sobre  Minirobotica. Revista Saber ElectronicaTodo sobre  Minirobotica. Revista Saber Electronica
Todo sobre Minirobotica. Revista Saber Electronica
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 

Programación con linq

  • 1. LINQ (Language-Integrated Query) Gabriel Espinoza Erices 2012 – 03 – 15
  • 2. INTRODUCCIÓN • LINQ es una innovación para disminuir la brecha entre el mundo de los objetos y el mundo de los datos.
  • 3. INTRODUCCIÓN • En Visual Studio, se pueden escribir consultas LINQ en VB o C# con: – Bases de datos SQL Server (Linq to SQL) – Documentos XML (Linq to XML) – DataSets ADO.NET (Linq to DataSet) – Colecciones de objetos que soporten IEnumerable o IEnumerable<T> • Requiere .NET Framework 3.5+
  • 4. QUERYABLE TYPES • Los tipos que soportan IEnumerable<T> o derivan de interfaces como IQueryable<T> son llamados Queryable Types • Un objeto “queryable type” no requiere modificación ni trato especial para servir como datasource de LINQ. • Si los datos orígenes no están en memoria como “queryable type”, el proveedor de LINQ debe representarlo como si estuviera.
  • 5. LINQ TO SQL COMO QUERYABLE TYPE Con LINQ to SQL, primero se crea un mapeo objeto-relacional en tiempo de diseño, se crean las querys contra esos objetos. Luego en tiempo de ejecución, LINQ to SQL maneja la comunicación con la base de datos.
  • 6. LA QUERY • La query especifica qué información obtener de una o varias fuentes. Opcionalmente la query también puede especificar como esos datos deben ser ordenados, agrupados y formados antes de ser retornada. • Una query tiene 3 clausulas: – from: Especifica el data source – where: aplica el filtro – select: especifica el tipo de los elementos retornados.
  • 7. EJECUCIÓN DE LA QUERY La query por si misma no ejecuta ninguna acción ni retorna datos. Solo almacena la información requerida para producir los resultados cuando la consulta sea ejecutada en un punto posterior.
  • 8. FORZAR EJECUCIÓN INMEDIATA • Las querys que realizan funciones de agregado sobre un rango de fuentes, primero deben iterar sobre esos elementos. Ej: Count, Max, Average, First, e tc. Notar que estas consultas no retornan una colección, sino que un valor. • Para forzar la ejecución inmediata de cualquier query y almacenar en cache sus resultados, se pueden usar el ToList<T> o ToArray<T>
  • 9. SINTAXIS Son equivalentes
  • 10. OPERACIONES BÁSICAS Range Variable Delcaración del DataSource DataSource Declaración de filtros Da “forma” al resultado de la query
  • 11. ORDER BY & JOINS Ordenamiento Un join crea asociaciones entre secuencias que no estén explicitamente modeladas en los DataSources. En LINQ los join SIEMPRE funcionan contra objetos y no tablas de bases de datos
  • 12. AGRUPAR Agrupar: Al agrupar, se forma una lista de listas. La cláusula group permite agrupar los resultados basados en una llave que se especifique. Ejemplo: Los resultados agrupados por ciudad, de tal manera que los clientes de Londres o Paris son grupos individuales. En este caso cust.City es la llave. Si se necesita interactuar con el grupo, se puede usar into para crear una variable que lo referencie
  • 13. CONSULTAS y TRANSFORMACIONES DE TIPOS DE DATO
  • 14. LINQ y CLASES GENÉRICAS • IEnumerable<T> es la interfaz que habilita que las colecciones de clases genéricas puedan ser enumeradas usando la sentencia foreach. Las colecciones de clases genéricas soportan IEnumerable<T> tal como las colecciones no genéricas (arraylists). • Cuando veas que una query está escripta como IEnumerable<Customer>, significa que la query, cuando sea ejecutada, producirá una secuencia de 0 o más objetos Customer.
  • 15. LINQ y CLASES GENÉRICAS Se puede dejar que el compilador maneje la declaración genérica.
  • 16. POR QUÉ LINQ VENCE A SQL SELECT UPPER(Name) Supongamos queremos FROM Customer hacer una consulta simple WHERE Name LIKE 'A%' ORDER BY Name SELECT UPPER(Name) FROM Ahora supongamos que ( estos resultados están SELECT *, RN = row_number() alimentando una página OVER (ORDER BY Name) web y queremos obtener FROM Customer solo las filas 21-30. De la WHERE Name LIKE 'A%' nada, ahora necesitamos )A una subquery WHERE RN BETWEEN 21 AND 30 ORDER BY Name
  • 17. POR QUÉ LINQ VENCE A SQL Y si necesitamos agregar SELECT TOP 10 UPPER (c1.Name) soporte para bases de datos FROM Customer c1 anteriores a SQL SERVER WHERE 2005, se vuelve peor aún!! c1.Name LIKE 'A%' AND c1.ID NOT IN ( SELECT TOP 20 c2.ID FROM Customer c2 No solo es complicado, sino WHERE c2.Name LIKE 'A%' que viola el principio DRY ORDER BY c2.Name (Don’t Repeat Yourself) ) ORDER BY c1.Name
  • 18. POR QUÉ LINQ VENCE A SQL SELECT TOP 10 UPPER (c1.Name) FROM Customer c1 WHERE var query = from c in db.Customers c1.Name LIKE 'A%' AND c1.ID NOT IN where c.Name.StartsWith("A") ( SELECT TOP 20 c2.ID orderby c.Name FROM Customer c2 select c.Name.ToUpper(); WHERE c2.Name LIKE 'A%' ORDER BY c2.Name var thirdPage = query.Skip(20).Take(10); ) ORDER BY c1.Name Aquí tenemos la misma consulta pero en LINQ. La ganancia en simplicidad es clara. IQueryable<T> Paginate<T> (this IQueryable<T> query, int skip, int take) Composability: Podemos { dividir la consulta y hacer return query.Skip(skip).Take(take); métodos genéricos } reutilizables var thirdPage = query.Paginate (20, 10);
  • 19. SELECT p.* FROM Purchase p LEFT OUTER JOIN Customer c INNER JOIN Address a ON c.AddressID = a.ID ON p.CustomerID = c.ID WHERE (a.State = 'WA' || p.CustomerID IS NULL) AND p.ID in ( SELECT PurchaseID FROM PurchaseItem Otro beneficio de LINQ es que GROUP BY PurchaseID HAVING SUM (SaleAmount) > 1000 puedes consultar a través de ) relaciones sin tener que hacer joins. var purchases = from p in db.Purchases where p.Customer.Address.State == "WA“ || p.Customer == null where p.PurchaseItems.Sum(pi => pi.SaleAmount) > 1000 select p;
  • 20. Parametrización: No hay que complicarse con los ataques de inyección de SQL pues la parametrización de LINQ es inline, segura y altamente legible. IQueryable<Customer> GetCustomers (string state, decimal? minPurchase) { var query = Customers.AsQueryable(); if (state != null) query = query.Where (c => c.Address.State == "WA"); if (minPurchase != null) query = query.Where (c => c.Purchases.Any (p => p.Price > minPurchase.Value)); return query; } SELECT [t0].[ID], [t0].[Name], [t0].[AddressID] FROM [Customer] AS [t0] Si pasamos state y minPurchase nulos SELECT [t0].[ID], [t0].[Name], [t0].[AddressID] FROM [Customer] AS [t0] LEFT OUTER JOIN [Address] AS [t1] ON [t1].[ID] = [t0].[AddressID] Si pasamos ambos valores LINQ no solo WHERE (EXISTS( SELECT NULL AS [EMPTY] agregará los predicados, sino que FROM [Purchase] AS [t2] WHERE ([t2].[Price] > @p0) AND ([t2].[CustomerID] = [t0].[ID]) también los JOINS )) AND ([t1].[State] = @p1)
  • 21. Cuándo no usar LINQ A pesar de su poder, LINQ no deja obsoleto a SQL. Toma más del 95% de la funcionalidad de las queries, pero se seguirá necesitando SQL para: • Queries que busquen máxima optimización. • Queries que involucren seleccionar en tablas temporales y luego consultar esas tablas. • Actualizaciones con predicados e inserciones masivas (bulk) • Triggers
  • 22. Tener que conocer dos lenguajes para querys no es realmente un problema, dado que de todas maneras LINQ provee una forma común para interactuar con distintas fuentes de datos. Arreglos, Listas, XML, Bases de Datos, y en general, de cualquier objeto que herede de IQueryable y IEnumerable.
  • 23. Fuentes • http://msdn.microsoft.com/en- us/library/bb397933.aspx • http://msdn.microsoft.com/en- us/library/bb397926.aspx • http://www.codeproject.com/Articles/230380 /LINQ-to-SQL-Advanced-Concepts-and- Features • http://www.linqpad.net/WhyLINQBeatsSQL.as px