Post on 22-Feb-2016
description
Consultando Base de Datos con LINQ en C#
Richard Jiménez V.Empresas América www.empresas-america.comlinqucatec.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
UMSSANBBanca y FinanzasUniversidad Católica Boliviana, UPDSEmpresas 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 LINQConsultas en LINQSintaxis de LINQConsultas sobre colecciones en memoria en LINQAcceso a bases de datos con LINQIntegración con XMLPractica en LINQ
Cambiando de Perspectiva …
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.
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 parte 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
¿Qué es LINQ?Language Integrated Query (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), clases enumerables, XML, conjuntos de datos desde bases de datos relacionales y orígenes de datos de terceros.
LINQ es:
Tipos fuertesBeneficios del IntelliSense
Language INtegrated Queries
Colecciones de objectsDatos relacionalesXML
Queries integrados en el código (C#/VB)
Queries Unificados
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();//Comandosconnection.Close();
Con LINQ
LinqDb1DataContext db = new LinqDb1DataContext();
var query = from resp in db.respobable select resp;
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
Términos y Características de LINQ
Query ExpressionMethod Queries
Inferencia de TiposTipos 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
DEMOHello LINQ
Agenda
Acceso a Datos en EvoluciónEntendiendo LINQ to SQLEntendiendo LINQ to XML
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 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
XDocumentXNamespaceXCommentXElementXAttribute
DEMOTrabajando con Datos XML
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
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
PREGUNTAS?