Your SlideShare is downloading. ×
0
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Linq
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Linq

1,292

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
1,292
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. <ul><li>LINQ </li></ul><ul><li>L anguage In tegrated Q ueries </li></ul>
  • 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>
  • 5.  
  • 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>
  • 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>
  • 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>
  • 9. (Solamente necesitamos importar System.Linq para poder hacer uso de LINQ en nuestro código)
  • 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>
  • 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>
  • 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
  • 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>
  • 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
  • 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>
  • 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
  • 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();
  • 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
  • 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
  • 20.  
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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>
  • 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).
  • 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 .
  • 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>
  • 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>
  • 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>
  • 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>
  • 48.  
  • 49.  
  • 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>
  • 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>
  • 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>
  • 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>
  • 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/guest4a20b0/linq-340302 </li></ul>
  • 55. <ul><li>Instalación y ejemplos con LINQPREVIEW </li></ul>
  • 56.  

×