Transcript Slide 1

Language Integrated
Query
Johnny Halife
Microsoft Student Ambassador
Southworks
Un problema práctico
5 Stored
Procedures
Sistema
Objeto
Recursos
DataAccess
Agenda
Qué es LINQ?
Standard Query Operations
DLINQ
Conclusiones
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
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
SQLServer
SQL or
Stored
Procs
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);
}
No hay
dr.Close();
checkeos en
compilación
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
Demostracion #1
Una consulta con LINQ
En qué esta basado LINQ?
En las innovaciones introducidas por C# 2.0 y
C# 3.0
Objetivos de C# 3.0
Integración de OOP, Relacional y Xml.
Basarse en los fundamentos de C# 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
Sirven para el resultado de las querys
Inferencia de Tipos
Codificación más clara
Posibilidad de trabajar con tipos anónimos
Demostracion #2
C# 3.0 Features
Agenda
Qué es LINQ?
Standard Query Operations
DLINQ
Conclusiones
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, … ]
select expr | group expr by key
[ into id query ]
PUEDE CONTINUAR
CON UN into
orderby
OPCIONAL
TERMINA CON UN select o CON
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>
Demostracion #3
Usando métodos de consulta
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
Demostracion #3
Accediendo a datos relacionales con
DLINQ
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
Demostracion #4
Relaciones con LINQ
Caracteristicas
Updates automaticos
Usando optimistic concurrency
Transactions
Integradas con System.Transactions
Demostracion #5
Updates usando DLINQ
Conclusiones
Demostracion #7
Poniendo todo junto….
Para más información
Data Access and Storage Developer Center:
The LINQ Project
http://msdn.microsoft.com/netframework/future/lin
q/
C# 3.0 Hands On Lab
LINQ Hands On Lab
http://staff.southworks.net/blogs/johnny
http://www.ajlopez.net
Preguntas