Sunteți pe pagina 1din 18

Mecanismo uniforme y extensible para

consultar fuentes de datos de


diferentes tipos: las expresiones de
consulta.
Sintaxis basada en nuevas palabras
reservadas contextuales.
Semntica enchufable: los lenguajes
no definen la semntica de las nuevas
palabras reservadas, sino nicamente
un conjunto de reglas para reescribir
esas expresiones como cascadas de
llamadas a mtodos.
SqlConnection con = new SqlConnection(...);
con.Open();
SqlCommand cmd = new SqlCommand(
@"SELECT * FROM Customers
WHERE c.Region = @Region", con
);
cmd.Parameters.AddWithValue("@Region", "UK");
DataReader dr = cmd.ExecuteReader();
while (dr.Read()) {
string name =
dr.GetString(dr.GetOrdinal("Name"));
string phone =
dr.GetString(dr.GetOrdinal("Phone"));
DateTime date = dr.GetDateTime(3);
}
dr.Close();
con.Close();
C#
var myCustomers = from c in customers
where c.Region == "UK"
select c;

VB.NET
Dim myCustomers = From c In customers _
Where c.Region = "UK" _
Select c
var delColo =
from f in DatosFutbol.Futbolistas
where f.CodigoClub == Colo"
select new { f.Nombre, f.Edad };

var delaCato =
DatosFutbol.Futbolistas
.Where(f => f.CodigoClub == Cato")
.Select(f => new { f.Nombre, f.Edad });
Fuentes de consultas
Los datos provienen de cierta fuente, que
implementa IEnumerable<T>.

Operadores de consulta estndar


No todos los operadores tienen un reflejo
en la sintaxis de los lenguajes.
El patrn LINQ.
Restriccin Where
Proyeccin Select, SelectMany
Ordenacin OrderBy, ThenBy
Agrupacin GroupBy
Encuentros Join, GroupJoin
Cuantificadores Any, All
Particin Take, Skip, TakeWhile, SkipWhile
Conjuntuales Distinct, Union, Intersect, Except
Un elemento First, Last, Single, ElementAt
Agregados Count, Sum, Min, Max, Average
Conversin ToArray, ToList, ToDictionary
Conversin de elementos OfType<T>, Cast<T>
Composicionales, jerrquicas
Anidamiento arbitrario.
Posibilidad de aplicar operadores
adicionales.
Declarativas y no imperativas
Diga qu usted desea obtener, no cmo.
El cmo va por el proveedor.
Ejecucin diferida
Las consultas se ejecutan solo a medida
que sus resultados se solicitan.
Tecnolog Espacio de
Ensamblado
a nombres
LINQ
System.Core.dll System.Linq
to Objects
LINQ
System.Xml.Linq.dll System.Xml.Linq
Basados
to XML en IEnumerable<T> Basados en
LINQ IQueryable<T>
System.Data.DataSetExtension
System.Data
to DataSet s.dll
LINQ
System.Data.Linq.dll System.Data.Linq
to SQL

LINQ System.Data.Objec
System.Data.Entity.dll
to Entities ts y otros

Silverlight 2.0
.NET 3.5 .NET 3.5 CF
C# 3.0 VB 9.0 Otros

Proveedores LINQ
Basados en IEnumerable<T> Basados en
IQueryable<T>
LINQ to LINQ to LINQ to (el LINQ to LINQ to (el
Objects XML DataSets suyo) SQL Entities suyo)

<libro>
<titulo/>

<autor/>

<precio/>
</libro>

XML
Basados en Basados en
IEnumerable<T> IQueryable<T>

Interfaz IEnumerable<T> IQueryable<T>

Ejecucin Local, en memoria Usualmente remota


Basados en IEnumerable<T> Basados en
Anlisis de rboles de
Implementacin Iteradores IQueryable<T>
expresiones
LINQ to Objects
LINQ to SQL
Proveedores LINQ to XML
LINQ to Entities
LINQ to DataSet
LINQ to Pipes
Mis ejemplos LINQ to TFS
LoggingLINQ
Habilite sus API existentes para LINQ
Especficamente para consultas en
memoria.
Cree mtodos extensores que devuelvan
un objeto IEnumerable<T>.
Desarrolle su propio proveedor de
consultas
Implemente IQueryable<T>.
Analice rboles de expresiones y traduzca
nodos a cdigo o a un lenguaje de
consultas diferente.
Analice cundo y cmo sus consultas se
ejecutan
Momento de ejecucin.
Ejecucin local vs. remota.
Lugar/capa de ejecucin real.
Mantenga las consultas dentro de
ensamblados
No pase expresiones de consulta entre
capas.
Cuidado con los tipos annimos!
Planifique de antemano qu tipos son
importantes.
No abuse de las proyecciones.
Aprenda:
A escribir consultas con y sin la sintaxis.
Las nuevas caractersticas de C# 3.0
Los detalles de la traduccin de la sintaxis
en llamadas a operadores y cmo
funcionan stos.
Parallel LINQ
Pasa partes de una consulta a diferentes
ncleos/procesadores.
Proveedores de consultas de terceros:
LINQ to Amazon, LDAP, SharePoint,
NHibernate, MySql, Flickr, y mucho
ms.
LINQ 2.0
LINQ es un mecanismo uniforme y
extensible para consultar fuentes de
datos de diferentes tipos
LINQ cambiar la forma en que
escribimos cdigo.
Ms declarativo
Muchos menos bucles a la vista.
Cdigo ms fcil de leer y mantener.
Sistemas Capa de Datos
Externos

Modelo de
Lgica de Objetos
(Datasets/Obj
Negocio etos)
Entidad
Relacio
es
nes
Presentaci
n Modelo
Conceptual
(EDM)
Entidad
Relacio
es
nes
NHibernate
Castle MonoRail / ActiveRecord
SubSonic
Code generation tool + templates
CodeSmith, MyGeneration,
LLBLGen/Pro +
NetTiers, DooDads, roll your own...

S-ar putea să vă placă și