Nuevas Formas de Pensar en Datos con LINQ y Visual Studio 2008
Julio CasalSoftware DeveloperJohn Galt Solutions
Qué Veremos Hoy?
La filosofía de LINQSintaxis para queries LINQQueries sobre colección en memoryAcceso a bases de datosIntegración XML
Nivel 200
Experiencia Previa
C# ó VB IntermedioSintaxis para queries SQLHabilidades XML intermedias
Agenda
Acceso a Datos en EvoluciónEntendiendo LINQ to SQLEntendiendo LINQ to XMLExplorando LINQ y XML en VB
Data…es nuestro trabajo
Consultar y manipular datos siempre ha sido una parte fundamental de nuestros trabajos como desarrolladores
El formato de los datos cambia, pero las necesidades clave son las mismas
USE empl
REPLACE ALL salary WITH (salary * 1.1) FOR supervises > 0
LIST ALL fname, lname, salary FOR Supervises > 0
Data Access(DBASE 1980s)
• La consulta y manipulación de datos es una pate fundamental de la experiencia en el modelo de programación
• Tenía limitaciones, pero era útil
SqlCommand cmd = new SqlCommand( @"SELECT fname, lname, salary
FROM Empl WHERE supervises > @p0"
);
cmd.Parameters.AddWithValue("@po", 0);
SqlConnection c = new SqlConnection(…); c.Open(); DataReader people = c.Execute(cmd);
while (people.Read()) { string fname = (string) people[“fname”]; string lname = (string) people[“lname”]; double salary = (double) people[“salary”]; } dr.Close();
APIs de Acceso a Datos(finales de 1990s/inicios de 2000s)
Mapeo Objecto / Relacional(en los últimos años)
public class Employee { public string FirstName; public string LastName; public double Salaray; } IList employees = session.CreateCriteria(typeof(Employee)) .Add(Expression.Gt(“supervises", 0) .List();
foreach(Employee employee in employees) { string fname = employee.FirstName; string lname = employee.LastName; double salary = employee.Salary; }
• Mapea datos relacionales hacia/desde objetos• Integración más clara de reglas de negocio y
validaciones
Pero Aún Existen Retos…
Cómo traer datos no-relacionales?XML, RSS, Web Services, REST, AD, Files, etc.
Cómo interactuar con objetos planos?Cómo interactura y consultar modelos de dominio personalizado?
Cómo permitir darle forma y transformar los datos?Soportar composición flexible de queries
Cómo permitir esto con código limpio en un mundo tanto tipificado como dinámico?
LINQ
Operaciones de Consultas, Asignación y Transformación para .NET
Convierte a la consulta de datos un concepto de programación fundamental
Trabaja con todos los tipos y formas de datosBases de datos relacionalesXMLObjetos Planos
Trabaja con todos los lenguajes .NETLas nuevas versiones de VB y C# tienen soporte integrado en el lenguaje
Qué es LINQ?
Tipos fuertesBeneficios del IntelliSense
Language INtegrated Queries
Colecciones de objectsDatos relacionalesXML
Queries integrados en el código (C#/VB)
Queries Unificados
Términos y Características
Query Expression
Method Queries
Inferencia de Tipos
Tipos Anónimos
Expresiones Lambda
Dos sintaxis para queries
Métodos de Extensión
Project Select <expr>
Filter Where <expr>, Distinct
Order Order By <expr>, <expr> [ Ascending | Descending ]
Aggregate
Count([<expr>]), Sum(<expr>), Min(<expr>), Max(<expr>), Avg(<expr>)
Query Expressions
var todaysBirthday =from c in db.Customerswhere c.BirthDay == DateTime.Today
orderby c.BirthDayselect new {
c.FullName, Age = DateTime.Today – c.BirthDay };
SELECT c.FullName, Age = getdate() – c.BirthDayFROM Customers cWHERE c.BirthDay = getdate()ORDER BY c.BirthDay
DEMODe C# 2.0 a LINQ
Agenda
Acceso a Datos en EvoluciónEntendiendo LINQ to SQLEntendiendo LINQ to XMLExplorando LINQ y XML en VB
LINQ to SQL
Generación implícita de queries
Generación explícita de queries
Soporte completo a CRUD
Mapeando los Datos
Filas como objetos de negocioTablas como coleccionesBases de Datos como DataContext
Base de Datos
Tabla
Fila
Fila
DataContext
Colección
Objeto
Objeto
DEMOExplorando LINQ to SQL
Agenda
Acceso a Datos en EvoluciónEntendiendo LINQ to SQLEntendiendo LINQ to XMLExplorando LINQ y XML en VB
Beneficios de LINQ to XML
No hay barrera conceptual XML vs. code
Aprovecha experiencia con DOM
Facilita los requerimientos de compatibilidad
Objetos de Ayuda LINQ to XML
XDocumentXNamespaceXCommentXElementXAttribute
DEMOTrabajando con Datos XML
Agenda
Acceso a Datos en EvoluciónEntendiendo LINQ to SQLEntendiendo LINQ to XMLExplorando LINQ y XML en VB
Nuevas Características de VB
Variables locales implícitas
Métodos de extensión
Inicializadores de objetos
Tipos anónimos
Expresiones de Queries
Dim x = 5
<Extension()> _ Sub Rand (col As IEnumerable)
New Point With { .x = 1, .y = 2 }
New With { c.Name, c.Phone }
From … Where … Select
Beneficios de VB con LINQ to XML
Literales XML Dim doc = <root><results/></root>
Propiedades XML
If doc.<results>.Count() > 5 Then …Console.WriteLine(<book>.@name)
Namespaces Importados
Imports <xmlns:ns=http://testuri.org”>
DEMOTrabajando con XML, VB y ASP.NET
Resumen
LINQ habilita acceso a datos declarativo
Los queries son ahora parte del lenguaje
Unifica acceso a datos entre orígenes de datos
Más en:www.microsoft.com/learning/books
Publicaciones relacionadas con LINQ
Quieres saber más?
Centro de información de LINQ
http://msdn.microsoft.com/data/ref/linq
El blog más didáctico sobre LINQ y VS 2008
http://weblogs.asp.net/scottgu
Blogs de los creadores
http://blogs.msdn.com/adonet
http://blogs.msdn.com/data
Mi blog
http://msguayaquil.com/blogs/julioc
PREGUNTAS?
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.