Language Integrated Query

Anuncio
27/10/2008
Investigación L.A.C.A.
BIENVENIDOS
3 de Junio de 2008
Buenos Aires
Guillermo Defino
Células UAI
http://uaicel.uai.edu.ar/
1
27/10/2008
Un problema práctico
5 Stored Procedures
Sistema
Objeto
Recursos
DataAccess
Agenda
Qué es LINQ
Standard Query Operations
DLINQ
Conclusiones
2
27/10/2008
Qué es LINQ?
La programación hoy en día




Desarrollo Orientado a Objetos
Datos en tecnologías no OO.
Distintos entornos de Desarrollo
 No Intellisense, late bound, verbose
 T-SQL vs. .NET Framework
“Impedance Mismatch”
Database World
Programming World
Transactions
Exception Handling
Nulls - 3-value logic
“Different” nulls
Normalized Data
Objects
Declarative Queries
Imperative operations
Transparency
Encapsulation
The LINQ Project
C#
Others…
VB
.NET Language Integrated Query
Standard
Query
Operators
DLinq
(ADO.NET)
XLinq
(System.Xml)
<book>
<title/>
<author/>
<year/>
<price/>
</book>
Objects
SQL
WinFS
XML
3
27/10/2008
Arquitectura
from c in db.Customers
where c.City == "London"
select
new { c.Name, c.Phone }
LINQ Query
Application
Objects
SubmitChanges()
Services:
- Change tracking
- Concurrency control
- Object identity
DLinq
(ADO.NET)
SQL Query
select Name, Phone
from customers
where city = 'London'
Rows
SQL or
Stored
Procs
SQLServer
Una consulta hoy en día
Queries entre
SqlConnection c = new SqlConnection(…);
comillas
c.Open();
SqlCommand cmd = new SqlCommand(
@"SELECT c.Name, c.Phone
Argumentos
FROM Customers c
literales
WHERE c.City = @p0"
);
cmd.Parameters.AddWithValue("@po", "London");
DataReader dr = c.Execute(cmd);
while (dr.Read()) {
string name = dr.GetString(0);
Resultados no
string phone = dr.GetString(1);
tipados
DateTime date = dr.GetDateTime(2);
}
dr.Close();
No hay
checkeos en
compilación
4
27/10/2008
Una consulta con LINQ
public class Customer
{
public int Id;
public string Name;
public string Phone;
…
}
Clases que
describen tablas
Las tablas son
colecciones
Table<Customer> customers = db.Customers;
var contacts =
from c in customers
where c.City == "London"
select new { c.Name, c.Phone };
El query es
nativo del
lenguaje
Validación en
tiempo de
compilación
En qué esta basado LINQ?

En las innovaciones introducidas por C# 2.0 y
C# 3.0
5
27/10/2008
Objetivos de C# 3.0
Integración de OOP, Relacional y Xml.
Basarse en los fundamentos de C# 2.0.
Compilar bajo el CLR 2.0
No atar los lenguajes a APIS especificos.
Compatibilidad hacia atrás.
En qué esta basado LINQ?
Innovaciones C# 3.0

Métodos de Extensión
 Agregar metodos a clases (incluso selladas)
 Notación de cascada de puntos (tipica en OOP)
 Fácil de escribir

Expresiones Lambda
 Notación más clara y funcional
 Se pueden omitir los tipos de datos, se infieren.
 Puede ser una expresión o una secuencia de sentencias

Inicialización de Objetos
 Ya no es necesario declarar tantas sobrecargas del c‟tor como inicializaciones
posibles hay del objeto.
 Inicialización de Collections

Tipos Anónimos

Inferencia de Tipos
 Sirven para el resultado de las querys
 Codificación más clara
 Posibilidad de trabajar con tipos anónimos
6
27/10/2008
Expresiones Lambda C#3.0

Una expresión Lambda es una forma más simple de
escribir métodos anónimos, en vez de:
F f = delegate(int r) { return Math.PI*r*r; };

Escribir:
F f = r => Math.PI*r*r;

También soporta tipos por inferencia, idéntico a expresiones
delegadas.

Diferencia trivial, pero comparemos estas dos:
 Heights (ages, delegate(int a) { return 50+a*0.07; });
 Heights (ages, a => 50+a*0.07);

Las expresiones Lambda expressions son de Lisp (1960); in fact
1941 …
Agenda
Qué es LINQ
 Standard Query Operations
 DLINQ
 Conclusiones

7
27/10/2008
Standard Query Operations
Accediendo Objetos con LINQ

Expresiones de Consulta con LINQ
Empieza con from
from id in source
Seguido de cero o mas
from o where
{ from id in source | where condition }
[ orderby ordering, ordering, … ]
(opcional)
orderby
select expr | group expr by key
[ into id query ]
Termina con un select o con
Puede
contirnuar con
un into
un group by
Operaciones de Consulta de LINQ
Restricción
Where
Proyección
Select, SelectMany
Ordenación
OrderBy, ThenBy
Agrupación
GroupBy
Cuantificación
Any, All
Partición
Take, Skip, TakeWhile, SkipWhile
Conjuntos
Distinct, Union, Intersect, Except
Elementos
First, FirstOrDefault, ElementAt
Agregación
Count, Sum, Min, Max, Average, Fold
Conversion
ToArray, ToList, ToDictionary
Casting
OfType<T>
8
27/10/2008
Una Consulta con LinQ
Query Expressions (c#)

Queries traducen a invocaciones de métodos
 Where, Join, OrderBy, Select, GroupBy, …
from c in customers
where c.City == "Hove"
select new { c.Name, c.Phone };
Expresiones
Lambda
customers
.Where(c => c.City == "Hove")
.Select(c => new { c.Name, c.Phone });
9
27/10/2008
Agenda
Qué es LINQ
 Standar Query Operations
 DLINQ
 Conclusiones

DLINQ
Datos Relacionales con DLINQ
Mapeo a través de atributos
Mapeo manual o automatico (built-in tool)
Persistencia
Control de cambios automático
DataContext
Bases de Datos fuertemente tipadas
10
27/10/2008
Caracteristicas
Language Integrated Query
Checkeos en tiempo de compilación,
IntelliSense
Sintaxsis tipo SQL
Soporte para jerarquias y relaciones
Carga de objetos inteligentes
Lazy o Inmediata
Accediendo a datos relacionales
con DLINQ
11
27/10/2008
Ejemplos de DLinQ
• Conectarse a una Base de Datos.
private static String connString=@"AttachDBFileName=
„<blabla>\Data\Northwnd.mdf';
Server='.\SQLEXPRESS';
Integrated Security=SSPI";
private Northwind db = new Northwind(connString);
• Northwind es una subclase de DataConnection,
especialmente generada por la Base de datos
Northwind.
• Northwind es una Base de Datos de ejemplo
usada por Microsoft.
DLinQ: from-where-select
Consulta
var q =
from c in db.Customers
where c.City == "London“
select c;
foreach (var cust in q)
Console.WriteLine(cust.CompanyName);
Ejecutar q no realiza una consulta a la base
de datos.
Solo cuando el bucle foreach requiere el
resultado de q, la consulta será realizada.
12
27/10/2008
Características
Updates automáticos
Usando optimistic concurrency
Transacciones
Integradas con System.Transactions
Update único con LINQ
13
27/10/2008
DLinQ: Update único
var q =
from c in db.Customers
where c.CustomerID == "ALFKI“
select c;
Customer cust=
db.Customers.First(c=>c.CustomerID=="ALFKI");
cust.ContactTitle = "Vice President";
db.SubmitChanges();
Nada ocurre sobre la base actual hasta que
db.SubmitChanges() es llamado.
Este lanza una excepción si el registro
cust sobre la base ha sido actualizado por
otros (optimistic concurrency)
Agenda
Qué es LINQ
 Standar Query Operations
 DLINQ
 Conclusiones

14
27/10/2008
Conclusiones
Para más información

Data Access and Storage Developer Center: The
LINQ Project
 http://msdn.microsoft.com/netframework/future/linq/
C# 3.0 Hands On Lab
 LINQ Hands On Lab
 http://staff.southworks.net/blogs/johnny
 http://www.ajlopez.net

15
27/10/2008
Programas MSDN

Desarrollador Cinco Estrellas
 ¿Estás avanzando en el camino de las estrellas?
 www.dce2005.com

Plan MAS
 Capacitación gratuita y becas laborales
 www.microsoft.com/argentina/mas

WebCasts en nuestro idioma
 www.microsoft.com/spanish/msdn/latam/mediacenter/

Grupos de Usuarios, información, y mucho más en
MSDN:
 www.microsoft.com/spanish/msdn/argentina
Preguntas
16
27/10/2008
Muchas gracias por tu atención
Tu potencial. Nuestra pasión.
Guillermo Defino
Carlos Martínez
Maximiliano Eskinja
Facundo Bustos
Sebastián Luna
Miguel Costa
http://ilaca. /blogspot.com
17
Descargar