Language Integrated Query Johnny Halife Microsoft Student Ambassador Southworks
Un problema práctico Sistema 5 Stored Procedures Objeto DataAccess Recursos
Agenda Qué es LINQ? Standard Query Operations DLINQConclusiones
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” Transactions Nulls - 3-value logic Normalized Data Declarative Queries Transparency Exception Handling “Different” nulls Objects Imperative operations Encapsulation Database World Programming World
Standard Query Operators Objects DLinq (ADO.NET) XLinq(System.Xml) XML.NET Language Integrated Query C#VBOthers… SQLWinFS The LINQ Project
Arquitectura LINQ Query Objects SubmitChanges() SQL Query Rows SQL or Stored Procs DLinq (ADO.NET) SQLServer from c in db.Customers where c.City == "London" select new { c.Name, c.Phone } select Name, Phone from customers where city = 'London' Application Services: - Change tracking - Concurrency control - Object identity
Una consulta hoy en día SqlConnection c = new SqlConnection(…); c.Open(); SqlCommand cmd = new c.Name, c.Phone FROM Customers c WHERE c.City ); " London " ); DataReader dr = c.Execute(cmd); while (dr.Read()) { string name = dr.GetString(0); string phone = dr.GetString(1); DateTime date = dr.GetDateTime(2); } dr.Close(); Queries entre comillas Resultados no tipados No hay checkeos en compilación Argumentos literales
Una consulta con LINQ public class Customer { public int Id; public int Id; public string Name; public string Name; public string Phone; public string Phone; …} Table customers = db.Customers; var contacts = from c in customers from c in customers where c.City == "London" where c.City == "London" select new { c.Name, c.Phone }; select new { c.Name, c.Phone }; Clases que describen tablas Las tablas son colecciones 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.
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 En qué esta basado LINQ? Innovaciones C# 3.0
Demostracion #2 C# 3.0 Features
Agenda Qué es LINQ? Standard Query Operations DLINQConclusiones
Standard Query Operations Accediendo Objetos con LINQ Expresiones de Consulta con LINQ from id in source { from id in source | where condition } [ orderby ordering, ordering, … ] select expr | group expr by key [ into id query ] EMPIEZA CON from SEGUIDO DE CERO o MAS from o where orderby OPCIONAL TERMINA CON UN select o CON UN group by PUEDE CONTINUAR CON UN into
Operaciones de Consulta de LINQ RestricciónWhere Proyección Select, SelectMany Ordenación OrderBy, ThenBy AgrupaciónGroupBy 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 CastingOfType<T>
Demostracion #3 Usando métodos de consulta
Agenda Qué es LINQ? Standar Query Operations DLINQConclusiones
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 DLINQ Datos Relacionales con DLINQ
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 Data Access and Storage Developer Center: The LINQ Project q/ q/ C# 3.0 Hands On Lab LINQ Hands On Lab
Preguntas
Agenda Qué es LINQ? Standard Query Operations DLINQXLINQConclusiones
XLINQ Por qué es XLINQ? “XML esta en Todos Lados” Programar con XML sigue siendo dificil XML Query vs. XMLDocuments Requiere mucha experiencia en XML No esta integrado al lenguaje No soporta joins
Qué es XLINQ? Un API para programar XML in-memory Language Integrated Query (LINQ) para XML Language Integrated Query (LINQ) para XML
Un reemplazo para System.Xml Streaming XML API Relacionado con W3C XLink Qué NO es XLINQ?
Demostracion #6 Una consulta al estilo XLINQ
XLINQ Caracteristicas Operaciones de Consulta Standard Operaciones de consulta para XML Expresiones de Consulta Transformaciones
XLINQ Query Operators XLINQ vs. XPATH ParentElement(XName)Elements()Elements(XName)Content()Content<T>()Attribute(XName)Attributes() parent::*child::name[1]child::*child::namechild::node()child::node(nodeType)attribute::nameattribute::* XPath Equivalent
XLINQ Query Operators XLINQ vs. XPATH DescendantsDescendants(XName)DescendantsAndSelfAncestorsAncestors(XName)AncestorsAndSelfElementsBeforeThisElementsAfterThis XPath Equivalent descendants::*descendants::namedescendants-or-self::*ancestors::*ancestors::nameancestors-or-self::*preceding-sibling::*following-sibling::*
Demostracion #6 XLINQ vs. XPATH