0
<ul><li>LINQ  </li></ul><ul><li>L anguage  In tegrated  Q ueries </li></ul>
<ul><li>Descripción general </li></ul><ul><li>Arquitectura </li></ul><ul><li>Antes y ahora </li></ul><ul><li>Operadores de...
 
<ul><li>LINQ está integrado directamente en tu lenguaje de programación favorito: </li></ul><ul><ul><li>Simplemente los di...
 
<ul><li>ANTES </li></ul><ul><ul><li>SELECT * from Libros WHERE CantidadStock> 50 AND Precio > 50.00 </li></ul></ul><ul><li...
<ul><li>Las palabras clave  from, where  y  select  pertenecen a los operadores de consulta estándar de LINQ.  </li></ul><...
<ul><li>Declaración implícita de tipos </li></ul><ul><li>Tipos anónimos </li></ul><ul><li>Inicializadores de objetos </li>...
(Solamente necesitamos importar  System.Linq  para poder hacer uso de LINQ en nuestro código)
<ul><li>var  es una nueva palabra clave en C# 3.0 que se utiliza para indicar al compilador que se quiere hacer uso de la ...
<ul><ul><li>int num = 50; </li></ul></ul><ul><ul><li>string str = “simple string&quot;; </li></ul></ul><ul><ul><li>myType ...
<ul><li>Permite crear objetos de tipo anónimo --> de nuevo podemos omitir el tipo cuando instanciamos un objeto y este es ...
<ul><li>Salida por pantalla del ejemplo anterior: </li></ul><ul><li>Como vemos, aunque hemos declarado un tipo anónimo, el...
<ul><li>Esta innovación permite inicializar objetos (anónimos o no) en el momento en el que los instanciamos </li></ul>Eje...
<ul><li>Crea clases de extensión que nos permitan extender la funcionalidad de tipos existentes a partir de crear nuevos m...
<ul><li>Son la evolución de los métodos anónimos de C# 2.0 </li></ul><ul><li>Habilitan el uso de condiciones sin tener que...
var nombres=new List<string>(); nombres.Add(&quot;Luis&quot;); nombres.Add(&quot;Juan Carlos&quot;); nombres.Add(&quot;Pep...
<ul><li>Habilitan la utilización de expresiones lambda como datos en tiempo de ejecución. </li></ul><ul><li>La clave de la...
<ul><li>Dos puntos de vista  </li></ul><ul><li>Simplificación de la programación XML mediante la adición de consultas espe...
 
<ul><li>Origen datos:  Fichero, cadena texto, XmlReader o TextReader. </li></ul><ul><li>Creación de XML por “Scratch”: Con...
<ul><li>Posibilidad de emplear IEnumerable como parámetro en la creación de elementos. </li></ul><ul><li>Ejemplo </li></ul...
<ul><li>Obtener hijo/s de un elemento </li></ul><ul><ul><li>Elemento.Elements(“Nombre”) ó Elemento.Elements(); </li></ul><...
<ul><li>CREACIÓN  --> Parecida a la de los elementos. </li></ul><ul><li>Ejemplo </li></ul><ul><li>XElement contact = new X...
<ul><li>Obtener el valor de un atributo </li></ul><ul><ul><li>Elemento.attribute(“NombreAtributo”); </li></ul></ul><ul><li...
<ul><li>Operadores estándar -> lenguaje de consulta completo para los IEnumerable<T>. </li></ul><ul><li>La integración de ...
<ul><li>from  c in contacts.Elements(&quot;contact&quot;) where  (string) c.Element(&quot;address&quot;).Element(&quot;sta...
<ul><li>Los lenguajes de programación modernos ofrecen el poder trabajar con los datos de forma ágil y rápida (Por ejemplo...
<ul><li>Traducción de las consultas en lenguaje integrado de consultas SQL para su ejecución en la base de datos. </li></u...
<ul><li>Adición de atributos personales a la definición corriente de las clases.  </li></ul><ul><li>Ejemplo </li></ul><ul>...
<ul><li>Objeto empleado para la recuperación de las bases de datos. Su finalidad es convertir las peticiones de recuperaci...
<ul><li>public partial class Northwind : DataContext { public Table<Customer> Customers; public Table<Order> Orders; </li>...
<ul><li>No empleo de Joins para relacionar dos o más tablas. </li></ul><ul><li>Al tratar los datos como objetos -> empleo ...
<ul><li>[Table(Name=&quot;Customers&quot;)] public class Customer { [Column(Id=true)] public string CustomerID; ... </li><...
<ul><li>[Table(Name=&quot;Orders&quot;)] public class Order { [Column(Id=true)] public int OrderID; </li></ul><ul><li>[Col...
<ul><li>Libre manipulación de los objetos por parte del programador. </li></ul><ul><li>A la hora de almacenar los datos, D...
<ul><li>No tan extendido como Xlinq y Dlinq. </li></ul><ul><li>Manipulación de datos procedentes de una hoja de cálculo. <...
<ul><li>Mejora sobre la ya comentada tecnología Xlinq. </li></ul><ul><li>Proporciona esquemas los cuales son mapeados a mo...
<ul><li>static double CalculateTotal(XElement batch)  </li></ul><ul><li>{ </li></ul><ul><li>  XNamespace ns = &quot;http:/...
<ul><li>using www.example.com.Orders; </li></ul><ul><li>  </li></ul><ul><li>static double CalculateTotal(Batch batch)  </l...
<ul><li>Herramienta de la línea de comandos que genera el código y las asignaciones del componente LINQ to SQL de .NET Fra...
<ul><li>Lenguaje general de SQLMETAL: </li></ul><ul><li>s qlmetal [options] [<input file>] </li></ul>Opciones de conexión ...
Opciones de extracción Opciones de resultados Opciones Descripción /views   Extrae las vistas de base de datos. /functions...
<ul><li>Crear un archivo .dbml que incluya los metadatos de SQL extra í dos: </li></ul><ul><li>sqlmetal /servidor:miservid...
<ul><li>Más conocido como O/R DESIGNER </li></ul><ul><li>Proporciona una superficie de diseño visual para crear clases de ...
<ul><li>SqlMetal es una herramienta de la línea de comandos, puede utilizarse en un proceso de compilación, pero para el d...
<ul><li>Utilidad gratuita relacionada con LINQ equivalente a SQL Server Management Studio para bases de datos de datos SQL...
 
 
<ul><li>Es la mejor manera de integrar linq en VS2005. Además de las correspondientes plantillas de proyecto, se instalará...
<ul><li>Parallel Language Integrated Query (PLINQ) ofrece una manera fácil de sacar partido del uso de hardware paralelo, ...
<ul><li>Es una DSL (Domain Specific Languaje) que añade sintaxis de consultas tipo SQL en el desarrollo de aplicaciones Ja...
<ul><li>El parecido fundamental de linq y josql es que intentan embeber sintaxis SQL a la DSLs, aunque siendo rigurosos la...
<ul><li>.NET Framework 3.5 : </li></ul><ul><li>http://www.microsoft.com/downloads/details.aspx?FamilyID=333325FD-AE52-4E35...
<ul><li>Instalación y ejemplos con LINQPREVIEW </li></ul>
 
Upcoming SlideShare
Loading in...5
×

Linq

2,295

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,295
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
89
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Linq"

  1. 1. <ul><li>LINQ </li></ul><ul><li>L anguage In tegrated Q ueries </li></ul>
  2. 2. <ul><li>Descripción general </li></ul><ul><li>Arquitectura </li></ul><ul><li>Antes y ahora </li></ul><ul><li>Operadores de consulta </li></ul><ul><li>Nuevas características </li></ul><ul><li>XLinq </li></ul><ul><li>DLinq </li></ul><ul><li>Relación entre Linq y Excel </li></ul><ul><li>Linq to XSD </li></ul><ul><li>Diferencias entre XSD y Linq </li></ul><ul><li>SQLMetal </li></ul><ul><li>Diseñador O/R </li></ul><ul><li>LinqPAD </li></ul><ul><li>LinqPREVIEW </li></ul><ul><li>PLinq </li></ul><ul><li>Linq y Java </li></ul><ul><li>Demo </li></ul><ul><li>Preguntas </li></ul>
  3. 4. <ul><li>LINQ está integrado directamente en tu lenguaje de programación favorito: </li></ul><ul><ul><li>Simplemente los diseñadores de un lenguaje integran la funcionalidad de esta API en C# o Visual Basic.NET </li></ul></ul><ul><li>Aplicable no solamente to SQL o XML sino a toda clase que implemente IEnumerable<T> </li></ul><ul><li>Tipos de LINQ </li></ul><ul><ul><li>LINQ : Language Integrated Query for in memory objects (LINQ to Objects) </li></ul></ul><ul><ul><li>DINQ : Language Integrated Query for databases (LINQ to ADO NET) </li></ul></ul><ul><ul><li>XLINQ : Language Integrated Query for XML (LINQ to XML) </li></ul></ul>
  4. 6. <ul><li>ANTES </li></ul><ul><ul><li>SELECT * from Libros WHERE CantidadStock> 50 AND Precio > 50.00 </li></ul></ul><ul><li>AHORA CON LINQ </li></ul><ul><ul><li>var result = from b Libros </li></ul></ul><ul><ul><li>where b.CantidadStock > 50 AND Precio > 50.00 </li></ul></ul><ul><ul><li>select b ; </li></ul></ul>
  5. 7. <ul><li>Las palabras clave from, where y select pertenecen a los operadores de consulta estándar de LINQ. </li></ul><ul><li>Son traducidos por el compilador en C# a un conjunto de métodos. </li></ul><ul><li>Ejemplo </li></ul><ul><ul><li>//Obtener solo la gente cuyos nombres comiencen por D </li></ul></ul><ul><ul><li>var namesWithD = from poster in mostActive </li></ul></ul><ul><ul><li>where poster.StartsWith(&quot;D&quot;) </li></ul></ul><ul><ul><li>select poster; </li></ul></ul><ul><li>Es traducido a: (Explicit Dot Notation) </li></ul><ul><ul><li>var namesWithD = mostActive </li></ul></ul><ul><ul><li>.Where(person => person.StartsWith(&quot;D&quot;)) </li></ul></ul><ul><ul><li>.Select(person => person); </li></ul></ul>
  6. 8. <ul><li>Declaración implícita de tipos </li></ul><ul><li>Tipos anónimos </li></ul><ul><li>Inicializadores de objetos </li></ul><ul><li>Métodos de extensión </li></ul><ul><li>Expresiones lambda </li></ul><ul><li>Árboles de expresión </li></ul>
  7. 9. (Solamente necesitamos importar System.Linq para poder hacer uso de LINQ en nuestro código)
  8. 10. <ul><li>var es una nueva palabra clave en C# 3.0 que se utiliza para indicar al compilador que se quiere hacer uso de la Inferencia de Tipos en una Variable Local de C# 3.0 </li></ul><ul><li>A diferencia de JavaScript, donde var representa una variable de tipo variable, esta palabra clave en C# indica al compilador que infiera el tipo de la asignación </li></ul><ul><li>Ejemplos </li></ul><ul><ul><li>var myInt = 5; </li></ul></ul><ul><ul><li>var myString = &quot;This is pretty stringy&quot;; </li></ul></ul><ul><ul><li>var myGuid = new System.Guid(); </li></ul></ul><ul><ul><li>myInt = &quot;Haha, let's see if we can trick the compiler!&quot;;  devuelve un error </li></ul></ul>
  9. 11. <ul><ul><li>int num = 50; </li></ul></ul><ul><ul><li>string str = “simple string&quot;; </li></ul></ul><ul><ul><li>myType obj = new myType(); </li></ul></ul><ul><ul><li>int[] numbers = new int[]{1,2,3}; </li></ul></ul><ul><ul><li>Dictionary<int,myType> dic = </li></ul></ul><ul><ul><li>new Dictionary<int,myType>(); </li></ul></ul><ul><ul><li>var num = 50; </li></ul></ul><ul><ul><li>var str = &quot;simple string&quot;; </li></ul></ul><ul><ul><li>var obj = new myType(); </li></ul></ul><ul><ul><li>var numbers=new int[]{1,2,3}; </li></ul></ul><ul><ul><li>var dic = new Dictionary<int,myType>(); </li></ul></ul>
  10. 12. <ul><li>Permite crear objetos de tipo anónimo --> de nuevo podemos omitir el tipo cuando instanciamos un objeto y este es construido de manera dinámica en tiempo de compilación. </li></ul><ul><li>Además de poder definir un objeto de manera anónima, es posible definir propiedades asociadas al mismo. </li></ul>var Santander=new {NombreCiudad=&quot;Santander&quot;, PoblacionCiudad=180000}; Console.WriteLine(&quot;La ciudad de &quot; + Santander.NombreCiudad + &quot; tiene una población de &quot; + Santander.PoblacionCiudad + &quot; habitantes&quot;); Console.ReadLine(); Console.WriteLine(&quot;Santander es de tipo &quot; + Santander.GetType()); Console.ReadLine(); Ejemplo
  11. 13. <ul><li>Salida por pantalla del ejemplo anterior: </li></ul><ul><li>Como vemos, aunque hemos declarado un tipo anónimo, el compilador es capaz de inferir el tipo correspondiente y sacar por pantalla los valores de sus propiedades. </li></ul><ul><li>El tipo devuelto es <Projection>f __0 que es el que se infiere en tiempo de compilación. </li></ul>
  12. 14. <ul><li>Esta innovación permite inicializar objetos (anónimos o no) en el momento en el que los instanciamos </li></ul>Ejemplo public class Ciudad { public string NombreCiudad; public int PoblacionCiudad; } static void Main(string[] args) {   Var Santander=new Ciudad{NombreCiudad=&quot;Santander&quot;, PoblacionCiudad=180000}; Console.WriteLine(&quot;La ciudad de &quot; + Santander.NombreCiudad + &quot; tiene una población de &quot; + Santander.PoblacionCiudad + &quot; habitantes&quot;); Console.ReadLine(); Console.WriteLine(&quot;Santander es de tipo &quot; + Santander.GetType()); Console.ReadLine(); } Combina inferencia de tipos e inicialización de objetos
  13. 15. <ul><li>Crea clases de extensión que nos permitan extender la funcionalidad de tipos existentes a partir de crear nuevos métodos. </li></ul><ul><li>Los métodos de extensión son métodos estáticos que son habilitados como métodos de extensión a través de la palabra reservada this . </li></ul>static class ExtensionDeTipos { public static string Saludar(this string nombre) { return (&quot;Hola &quot; + nombre + &quot;!&quot;); } } static void Main(string[] args) { string nombre = &quot;Mundo&quot;; Console.WriteLine(nombre.Saludar()); Console.ReadLine();   } Ejemplo CARACTERÍSTICA IMPORTANTE Es que se pueden añadir a cualquier tipo, incluyendo tipos genéricos como List <T> y Dictionary <T>
  14. 16. <ul><li>Son la evolución de los métodos anónimos de C# 2.0 </li></ul><ul><li>Habilitan el uso de condiciones sin tener que especificar el tipo. </li></ul><ul><li>Una expresión Lambda tiene 3 elementos : </li></ul><ul><ul><li>Un parámetro de lista (s), que puede ser tipado de manera explícita o implícita . </li></ul></ul><ul><ul><li>El token => </li></ul></ul><ul><ul><li>La expresió a aplicar </li></ul></ul>List <string> NombresLongitudMayor5 = nombres.FindAll(delegate(string s) {return(s.Length)>=5;}); Método anónimo C# 2.0 var NombresLongitudMayor5 = nombres.FindAll(s => s.Length>=5); Usando expresiones Lambda en C# 3.0
  15. 17. var nombres=new List<string>(); nombres.Add(&quot;Luis&quot;); nombres.Add(&quot;Juan Carlos&quot;); nombres.Add(&quot;Pepe&quot;); nombres.Add(&quot;Ramón&quot;);   var NombresLongitudMayor5=nombres.FindAll(s => s.Length>=5); foreach(string nombre in NombresLongitudMayor5) { Console.WriteLine(nombre); } Console.ReadLine();
  16. 18. <ul><li>Habilitan la utilización de expresiones lambda como datos en tiempo de ejecución. </li></ul><ul><li>La clave de la definición de árboles de expresión está en un nuevo tipo: Expression <T> . </li></ul>Expression<Func<string,bool>> NombresLongitudMayor5= s => s.Length>=5; Console.WriteLine(NombresLongitudMayor5); Console.ReadLine(); Ejemplo
  17. 19. <ul><li>Dos puntos de vista </li></ul><ul><li>Simplificación de la programación XML mediante la adición de consultas específicas para XML. </li></ul><ul><li>Xlinq proporciona: </li></ul><ul><ul><li>Construcción funcional </li></ul></ul><ul><ul><li>Manipulación de forma natural de elementos XML </li></ul></ul><ul><ul><li>Empleo de nombres expandidos ( evitar prefijos ) </li></ul></ul><ul><ul><li>Lenguaje integrado de consultas </li></ul></ul>Componente proyecto Linq Modernización/readaptación API DOM
  18. 21. <ul><li>Origen datos: Fichero, cadena texto, XmlReader o TextReader. </li></ul><ul><li>Creación de XML por “Scratch”: Construcción funcional. Creación a modo de objetos. Ejemplo: </li></ul><ul><li>XElement contacts = new XElement(&quot;contacts&quot;, new XElement(&quot;contact&quot;, new XElement(&quot;name&quot;, &quot;Patrick Hines&quot;), new XElement(&quot;phone&quot;, &quot;206-555-0144&quot;), new XElement(&quot;address&quot;, new XElement(&quot;street1&quot;, &quot;123 Main St&quot;), new XElement(&quot;city&quot;, &quot;Mercer Island&quot;), new XElement(&quot;state&quot;, &quot;WA&quot;), new XElement(&quot;postal&quot;, &quot;68042&quot;) ) ) ); </li></ul>
  19. 22. <ul><li>Posibilidad de emplear IEnumerable como parámetro en la creación de elementos. </li></ul><ul><li>Ejemplo </li></ul><ul><li>XElement contacts = new XElement(&quot;contacts&quot;, from p in persons select new XElement(&quot;contact&quot;, new XElement(&quot;name&quot;, p.Name), from ph in p.PhoneNumbers select new XElement(&quot;phone&quot;, ph) ) ); </li></ul>
  20. 23. <ul><li>Obtener hijo/s de un elemento </li></ul><ul><ul><li>Elemento.Elements(“Nombre”) ó Elemento.Elements(); </li></ul></ul><ul><ul><li>Elemento.Content<XElement>(); </li></ul></ul><ul><li>Obtener el padre de un elemento </li></ul><ul><ul><li>Elemento. Parent ; </li></ul></ul><ul><li>Añadir hijos a un nodo </li></ul><ul><ul><li>Elemento.add(); </li></ul></ul><ul><ul><li>Elemento.addAfterThis(ElementoHijo); </li></ul></ul><ul><li>Actualizar elemento </li></ul><ul><li>Eliminar elementos </li></ul><ul><ul><li>contact. Element (&quot;phone&quot;). Remove () ; </li></ul></ul><ul><ul><li>Elemento.removeContent() ; </li></ul></ul>
  21. 24. <ul><li>CREACIÓN --> Parecida a la de los elementos. </li></ul><ul><li>Ejemplo </li></ul><ul><li>XElement contact = new XElement(&quot;contact&quot;, new XElement(&quot;name&quot;, &quot;Patrick Hines&quot;), new XElement(&quot;phone&quot;, new XAttribute(&quot;type&quot;, &quot;home&quot;) , &quot;206-555-0144&quot; ), new XElement(&quot;phone&quot;, new XAttribute(&quot;type&quot;, &quot;work&quot;) , &quot;425-555-0145&quot; ) ); </li></ul>
  22. 25. <ul><li>Obtener el valor de un atributo </li></ul><ul><ul><li>Elemento.attribute(“NombreAtributo”); </li></ul></ul><ul><li>Eliminar atributos </li></ul><ul><ul><li>Atributo. remove(); </li></ul></ul><ul><ul><li>Elemento. setAttribute(null); </li></ul></ul>
  23. 26. <ul><li>Operadores estándar -> lenguaje de consulta completo para los IEnumerable<T>. </li></ul><ul><li>La integración de Xlinq con el lenguaje integrado de consultas se basa en: </li></ul><ul><ul><li>El impulso de los operadores estándar de consulta </li></ul></ul><ul><ul><li>El empleo de extensiones de consulta XML </li></ul></ul><ul><ul><li>El empleo de transformaciones XML </li></ul></ul>
  24. 27. <ul><li>from c in contacts.Elements(&quot;contact&quot;) where (string) c.Element(&quot;address&quot;).Element(&quot;state&quot;) == &quot;WA&quot; orderby (string) c.Element(&quot;name&quot;) select (string) c.Element(&quot;name&quot;); </li></ul><ul><li>from c in contacts.Elements(&quot;contact&quot;), ph in c.Elements(&quot;phone&quot;) where (string) c.Element(&quot;address&quot;).Element(&quot;state&quot;) == &quot;WA&quot; </li></ul><ul><li>&& ph.Value.StartsWith(&quot;206&quot;) orderby (string) c.Element(&quot;name&quot;) select c; </li></ul>
  25. 28. <ul><li>Los lenguajes de programación modernos ofrecen el poder trabajar con los datos de forma ágil y rápida (Por ejemplo los objetos). </li></ul>DLINQ Proyecto LINQ Bases de datos relacionales Lenguajes de programación modernos. muchas diferencias
  26. 29. <ul><li>Traducción de las consultas en lenguaje integrado de consultas SQL para su ejecución en la base de datos. </li></ul><ul><li>Los datos recuperados de la consulta son traducidos a la forma de objetos para que sean manipulador por el programador </li></ul>
  27. 30. <ul><li>Adición de atributos personales a la definición corriente de las clases. </li></ul><ul><li>Ejemplo </li></ul><ul><li>[Table(Name=&quot;Customers&quot;)] public class Customer { [Column(Id=true)] public string CustomerID; </li></ul><ul><li>[Column] public string City; } </li></ul>
  28. 31. <ul><li>Objeto empleado para la recuperación de las bases de datos. Su finalidad es convertir las peticiones de recuperación de información de las bases de datos, en objetos. </li></ul><ul><li>DataContext db = new DataContext(&quot;c:orthwindorthwnd.mdf&quot;); </li></ul><ul><li>Table<Customer> Customers = db.GetTable<Customer>(); </li></ul><ul><li>var q = from c in Customers where c.City == &quot;London&quot; select c; </li></ul><ul><li>foreach (var cust in q) Console.WriteLine(&quot;id = {0}, City = {1}&quot;, cust.CustomerID, cust.City); </li></ul>
  29. 32. <ul><li>public partial class Northwind : DataContext { public Table<Customer> Customers; public Table<Order> Orders; </li></ul><ul><li>public Northwind(string connection): base(connection) {} } </li></ul><ul><li>  </li></ul><ul><li>Northwind db = new Northwind(&quot;c:orthwindorthwnd.mdf&quot;); </li></ul><ul><li>var q = from c in db.Customers where c.City == &quot;London&quot; select c; </li></ul><ul><li>foreach (var cust in q) Console.WriteLine(&quot;id = {0}, City = {1}&quot;,cust.CustomerID, cust.City); </li></ul>
  30. 33. <ul><li>No empleo de Joins para relacionar dos o más tablas. </li></ul><ul><li>Al tratar los datos como objetos -> empleo de los atributos. </li></ul><ul><li>Especificación en la creación de las clases mediante atributos personales. </li></ul><ul><li>Método fácil y simple de manipulación de los datos. (c.Orders y o.Customer) </li></ul>
  31. 34. <ul><li>[Table(Name=&quot;Customers&quot;)] public class Customer { [Column(Id=true)] public string CustomerID; ... </li></ul><ul><li>private EntitySet<Order> _Orders; </li></ul><ul><li>[Association(Storage=&quot;_Orders&quot;,OtherKey=&quot;CustomerID&quot;)] public EntitySet<Order> Orders { get { return this._Orders; } set { this._Orders.Assign(value); } } } </li></ul>
  32. 35. <ul><li>[Table(Name=&quot;Orders&quot;)] public class Order { [Column(Id=true)] public int OrderID; </li></ul><ul><li>[Column] public string CustomerID; </li></ul><ul><li>private EntityRef<Customer> _Customer; </li></ul><ul><li>[Association(Storage=&quot;_Customer&quot;, ThisKey=&quot;CustomerID&quot;)] public Customer Customer { get { return this._Customer.Entity; } set { this._Customer.Entity = value; } } } </li></ul>
  33. 36. <ul><li>Libre manipulación de los objetos por parte del programador. </li></ul><ul><li>A la hora de almacenar los datos, Dlinq automáticamente traducirá las nuevas modificaciones a la base de datos. </li></ul><ul><li>Para almacenar los cambios: </li></ul><ul><ul><li>ObjetoDataContext . SubmitChanges() ; </li></ul></ul>
  34. 37. <ul><li>No tan extendido como Xlinq y Dlinq. </li></ul><ul><li>Manipulación de datos procedentes de una hoja de cálculo. </li></ul><ul><li>using(XlsWorkbook book = new XlsWorkbook(&quot;TestData00.xls&quot;)) </li></ul><ul><li>{ var sheets = from s in book.Worksheets </li></ul><ul><li>where s.Name == &quot;100&quot; </li></ul><ul><li>select s; </li></ul><ul><li>foreach(var sheet in sheets) Console.WriteLine(sheet.Name); </li></ul><ul><li>} </li></ul>
  35. 38. <ul><li>Mejora sobre la ya comentada tecnología Xlinq. </li></ul><ul><li>Proporciona esquemas los cuales son mapeados a modelos de objetos que permiten manejar la información disponible en xml como la programación orientada a objetos sin emplear etiquetas ni elementos XML </li></ul>
  36. 39. <ul><li>static double CalculateTotal(XElement batch) </li></ul><ul><li>{ </li></ul><ul><li> XNamespace ns = &quot;http://www.example.com/Orders&quot;; </li></ul><ul><li> return </li></ul><ul><li> (from purchaseOrder in batch.Elements(ns + &quot;PurchaseOrder&quot;) </li></ul><ul><li> from item in purchaseOrder.Elements(ns + &quot;Item&quot;) </li></ul><ul><li> select (double)item.Element(ns + &quot;Price&quot;) </li></ul><ul><li>* (int)item.Element(ns + &quot;Quantity&quot;) </li></ul><ul><li> ).Sum(); </li></ul><ul><li>} </li></ul>
  37. 40. <ul><li>using www.example.com.Orders; </li></ul><ul><li>  </li></ul><ul><li>static double CalculateTotal(Batch batch) </li></ul><ul><li>{ </li></ul><ul><li>return </li></ul><ul><li>(from purchaseOrder in batch.PurchaseOrder </li></ul><ul><li>from item in purchaseOrder.Item </li></ul><ul><li>select item.Price * item.Quantity </li></ul><ul><li>).Sum(); </li></ul><ul><li>} </li></ul>
  38. 41. <ul><li>Herramienta de la línea de comandos que genera el código y las asignaciones del componente LINQ to SQL de .NET Framework. </li></ul><ul><li>Acciones posibles </li></ul><ul><ul><li>Desde una base de datos, generar código fuente y atributos de asignación (o un archivo de asignación). </li></ul></ul><ul><ul><li>Desde una base de datos, generar un archivo de lenguaje intermedio de marcado de base de datos (.dbml) para su personalización. </li></ul></ul><ul><ul><li>Desde un archivo .dbml, generar código y atributos de asignación (o un archivo de asignación). </li></ul></ul>
  39. 42. <ul><li>Lenguaje general de SQLMETAL: </li></ul><ul><li>s qlmetal [options] [<input file>] </li></ul>Opciones de conexión Opciones Descripción /server: <nombre> Especifica el nombre del servidor de base de datos. /database: <nombre> Especifica el catálogo de base de datos del servidor. /user: <nombre> Especifica el identificador de usuario de inicio de sesión. El valor predeterminado es &quot;Utilizar autenticación de Windows&quot;. /password: <contraseña> Especifica la contraseña de inicio de sesión. El valor predeterminado es &quot;Utilizar autenticación de Windows&quot;. /conn: <cadena de conexión> Especifica la cadena de conexión a bases de datos. No se puede utilizar con las opciones /server , /database , /user o /password . /timeout: <segundos> Especifica el valor de tiempo de espera cuando SqlMetal tiene acceso a la base de datos. Valor predeterminado: 0 (es decir, sin límite de tiempo).
  40. 43. Opciones de extracción Opciones de resultados Opciones Descripción /views Extrae las vistas de base de datos. /functions Extrae las funciones de base de datos. /sprocs Extrae los procedimientos almacenados. Opciones Descripción /dbml [:archivo] Envía el resultado como .dbml. No se puede utilizar con la opción /map . /code [:archivo] Envía el resultado como código fuente. No se puede utilizar con la opción /dbml . /map [:archivo] Genera un archivo de asignación XML en lugar de atributos de asignación. No se puede utilizar con la opción /dbml .
  41. 44. <ul><li>Crear un archivo .dbml que incluya los metadatos de SQL extra í dos: </li></ul><ul><li>sqlmetal /servidor:miservidor/basededatos:northwind /dbml:mymeta.dbml </li></ul><ul><li>Generar un archivo .dbml que incluya los metadatos de SQL extra í dos de un archivo .mdf mediante SQL Server Express: </li></ul><ul><li>sqlmetal /dbml:mismetadatos.dbml miarchivodb.mdf </li></ul><ul><li>Generar un archivo .dbml que incluya los metadatos de SQL extra í dos de SQL Server Express: </li></ul><ul><li>sqlmetal /servidor:.sqlexpress /dbml:mismetadatos.dbml /basededatos:northwind </li></ul><ul><li>Crear el c ó digo fuente de un archivo de metadatos .dbml: </li></ul><ul><li>sqlmetal /espaciodenombres:nwind /c ó digo:nwind.cs /lenguaje:csharp mimetal.dbml </li></ul><ul><li>Generar c ó digo fuente directamente a partir de los metadatos de SQL: </li></ul><ul><li>sqlmetal /servidor:miservidor /basededatos:northwind /espaciodenombres:nwind /código:nwind.cs /lenguaje:csharp </li></ul>
  42. 45. <ul><li>Más conocido como O/R DESIGNER </li></ul><ul><li>Proporciona una superficie de diseño visual para crear clases de entidad y asociaciones (relaciones) de Linq to SQL basadas en los objetos de una base de datos. </li></ul><ul><li>Es decir, se usa para crear un modelo de objetos en una aplicación que se asigna a los objetos de una base de datos -> VS2005. </li></ul><ul><li>También genera una clase Data Context que se usa para enviar y recibir datos entre las clases de entidad y la base de datos. </li></ul>
  43. 46. <ul><li>SqlMetal es una herramienta de la línea de comandos, puede utilizarse en un proceso de compilación, pero para el diseño necesitamos este tipo de herramientas. </li></ul>
  44. 47. <ul><li>Utilidad gratuita relacionada con LINQ equivalente a SQL Server Management Studio para bases de datos de datos SQL Server Express, pero orientada a LINQ To SQL. </li></ul><ul><li>Según la página de su creador, además de permitirnos definir y probar nuestras consultas LINQ contra BD's SQL Server, también podremos hacerlo contra objetos (LINQ To Objects) o archivos XML (LINQ To XML). </li></ul><ul><li>Además de servirnos como herramienta de pruebas para nuestras consultas LINQ, LINQPad viene con un montón de ejemplos precargados (más de 200) </li></ul><ul><li>Necesidad Framework 3.5 </li></ul>
  45. 50. <ul><li>Es la mejor manera de integrar linq en VS2005. Además de las correspondientes plantillas de proyecto, se instalarán un montón de ejemplos tanto para VB como C#. </li></ul><ul><li>Funciona en Framerwork 2.0 que viene con VS2005 </li></ul><ul><li>Demo Instalación </li></ul>
  46. 51. <ul><li>Parallel Language Integrated Query (PLINQ) ofrece una manera fácil de sacar partido del uso de hardware paralelo, incluidos equipos tradicionales con varios procesadores y la última ola de procesadores multinúcleo. </li></ul><ul><li>Aparece en respuesta al aumento de disponibilidad de plataformas con procesadores multinúcleo </li></ul><ul><li>  </li></ul><ul><li>PLINQ es un motor de ejecución de consultas que acepta cualquier consulta LINQ to Objects o LINQ to XML y usa automáticamente varios procesadores o núcleos para su ejecución cuando estos están disponibles. </li></ul><ul><li>El cambio en el modelo de programación es minúsculo, lo cual significa que no es necesario ser un gurú de la simultaneidad para poder usarlo. </li></ul>
  47. 52. <ul><li>Es una DSL (Domain Specific Languaje) que añade sintaxis de consultas tipo SQL en el desarrollo de aplicaciones Java basándose en el modelo del proyecto LINQ </li></ul><ul><li>Anders Noras es su creador y en su blog encontramos algo más de información aunque no mucha más. (www.andersnoras.com) </li></ul><ul><li>Quaere se distribuye bajo una licencia libre. </li></ul><ul><li>Aunque todavía no hay una versión totalmente estable, ya era funcional y era capaz de ejecutar todos los ejemplos que Microsoft usa para ilustrar su tecnología. </li></ul><ul><li>El proyecto ha sido aceptado por la fundación Codehaus, que también alberga otros proyectos como Groovy, JRuby, Jetty o OpenEJB, y se ha liberado una nueva versión del proyecto. </li></ul>
  48. 53. <ul><li>El parecido fundamental de linq y josql es que intentan embeber sintaxis SQL a la DSLs, aunque siendo rigurosos la verdad es que que lo hacen de maneras muy diferentes. </li></ul><ul><li>JoSQL utiliza APIs que parsean cadenas (Strings) que definen la consulta, mientras que en Linq las consultas están integradas a nivel lenguaje de modo que los operadores where, select, orderby, etc., son elementos sintácticos del mismo C# 3.0. </li></ul>
  49. 54. <ul><li>.NET Framework 3.5 : </li></ul><ul><li>http://www.microsoft.com/downloads/details.aspx?FamilyID=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en </li></ul><ul><li>LINQ PREVIEW : </li></ul><ul><li>http://www.microsoft.com/downloads/details.aspx?familyid=1e902c21-340c-4d13-9f04-70eb5e3dceea&displaylang=en </li></ul><ul><li>LINQPad </li></ul><ul><li>http://www.linqpadupdates.net/LINQPad.exe </li></ul><ul><li>Presentación en SlideShare: </li></ul><ul><li>http://www.slideshare.net/blo85/linq </li></ul>
  50. 55. <ul><li>Instalación y ejemplos con LINQPREVIEW </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×