290 likes | 597 Views
Consultando Base de Datos con LINQ en C#. Richard Jiménez V. Empresas América www.empresas-america.com linqucatec.wordpress.com. ¿Quién soy?. Richard Jiménez Velasco Lic. en Informática en la UMSS Maestría en Informática en la UMSS
E N D
ConsultandoBase de Datos con LINQ en C# Richard Jiménez V. Empresas América www.empresas-america.com linqucatec.wordpress.com
¿Quién soy? Richard Jiménez Velasco Lic. en Informática en la UMSS Maestría en Informática en la UMSS Especialidad en desarrollo de aplicaciones Multimedia en Okinawa - Japón UMSS ANB Banca y Finanzas Universidad Católica Boliviana, UPDS Empresas América .Net Software Developer
¿Quiénes son Uds? • ¿Conoces C#? • ¿Lenguaje SQL? • ¿Base de datos?
¿Qué Veremos Hoy? • ¿Qué es LINQ? • La filosofía de LINQ • Consultas en LINQ • Sintaxis de LINQ • Consultas sobre colecciones en memoria en LINQ • Acceso a bases de datos con LINQ • Integración con XML • Practica en LINQ
Problema O.O. vs Relacional • El problema es que en la mayoría de los casos, al menos en lo bases de datos relacionales, existe una amplia brecha entre el lenguaje de programación O.O. y las base de datos. Paradigma Orientado a Objetos vs. Paradigma de Bases de datos relacionales.
Data Access(DBASE 1980s) USE empl REPLACE ALL salary WITH (salary * 1.1) FOR supervises > 0 LIST ALL fname, lname, salary FOR Supervises > 0 • La consulta y manipulación de datosesuna parte fundamental de la experiencia en el modelo de programación • Teníalimitaciones, pero era útil
APIs de Acceso a Datos(finales de 1990s/inicios de 2000s) SqlCommandcmd = new SqlCommand( @"SELECT fname, lname, salary FROM Empl WHERE supervises > @p0" ); cmd.Parameters.AddWithValue("@po", 0); SqlConnection c = new SqlConnection(…); c.Open(); DataReaderpeople = c.Execute(cmd); while (people.Read()) { string fname = (string) people[“fname”]; string lname = (string) people[“lname”]; double salary = (double) people[“salary”]; } dr.Close();
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; } • Mapeadatosrelacionaleshacia/desdeobjetos • Integraciónmásclara de reglas de negocio y validaciones
¿Qué es LINQ? • LanguageIntegratedQuery (LINQ) • Es un proyecto de Microsoft que agrega consultas nativas semejantes a las de SQL a los lenguajes de la plataforma .NET, inicialmente a los lenguajes Visual Basic .NET y C#. • LINQ define operadores de consulta estándar que permiten a lenguajes habilitados con LINQ filtrar, enumerar y crear proyecciones de varios tipos de colecciones usando la misma sintaxis. • Tales colecciones pueden incluir vectores (arrays), clasesenumerables, XML, conjuntos de datos desde bases de datos relacionales y orígenes de datos de terceros.
LINQ es: Queries integrados en el código (C#/VB) • Tipos fuertes • Beneficios del IntelliSense • Colecciones de objects • Datosrelacionales • XML Queries Unificados Language INtegratedQueries
Solución : LINQ • La intención de Microsoft con LINQ, es propor-cionar una solución para el problema del mapeo objeto-relacional, así como para simplificar la interacción entre los objetos y fuentes de datos. • El objetivo de crear LINQ es permitir que todo el código hecho en Visual Studio (incluidas las llamadas a bases de datos, datasets, XMLs) sean también orientados a objetos.
Ejemplo: Antes MySqlDataReader reg; string MyConString = "SERVER=" + ip + ";" + "DATABASE=“+db+"; "UID=“+user+“; PASSWORD=“+pass+”;”; MySqlConnection connection =new MySqlConnection(MyConString); MySqlCommand command = connection.CreateCommand(); command.CommandText = "SELECT * FROM responsable WHERE cod_resp='"+cod+"' AND usr_baja=''"; reg = command.ExecuteReader(); //Comandos connection.Close(); Con LINQ LinqDb1DataContext db = new LinqDb1DataContext(); var query = from resp in db.respobable select resp;
Pero Aún Existen Retos… • Cómotraerdatos no-relacionales? • XML, RSS, Web Services, REST, AD, Files, etc. • Cómointeractuar con objetosplanos? • Cómointeractura y consultarmodelos de dominiopersonalizado? • Cómopermitirdarle forma y transformar los datos? • Soportar composición flexible de queries • Cómopermitiresto con códigolimpio en un mundotantotipificadocomodinámico?
LINQ • Operaciones de Consultas, Asignación y Transformaciónpara .NET • Convierte a la consulta de datos un concepto de programación fundamental • Trabaja con todos los tipos y formas de datos • Bases de datos relacionales • XML • Objetos Planos • Trabaja con todos los lenguajes .NET • Las nuevas versiones de VB y C# tienen soporte integrado en el lenguaje
Términos y Características de LINQ • QueryExpression • MethodQueries Inferencia de Tipos TiposAnónimos Expresiones Lambda • Métodos de Extensión Dos sintaxispara queries
QueryExpressions SELECT c.FullName, Age = getdate() – c.BirthDay FROM Customers c WHERE c.BirthDay = getdate() ORDER BY c.BirthDay var todaysBirthday = from c in db.Customers where c.BirthDay == DateTime.Today orderby c.BirthDay select new { c.FullName, Age = DateTime.Today – c.BirthDay };
demo Hello LINQ
Agenda • Acceso a Datos en Evolución • Entendiendo LINQ to SQL • Entendiendo LINQ to XML
Mapeando los Datos • Filas como objetos de negocio • Tablas como colecciones • Bases de Datos como DataContext Base de Datos DataContext Tabla Colección
demo Explorando LINQ to SQL
Agenda • Acceso a Datos en Evolución • Entendiendo LINQ to SQL • Entendiendo LINQ to XML
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 • XDocument • XNamespace • XComment • XElement • XAttribute
demo Trabajando con Datos XML
Publicaciones relacionadas con LINQ Más en: www.microsoft.com/learning/books
Quieres saber más? • Centro de información de LINQ • http://msdn.microsoft.com/data/ref/linq • El blog másdidácticosobre LINQ • http://weblogs.asp.net/scottgu • Blogs de los creadores • http://blogs.msdn.com/adonet • http://blogs.msdn.com/data • Mi blog • http://linqucatec.wordpress.com