Consultando Base de Datos con LINQ en C#

Post on 22-Feb-2016

97 views 0 download

description

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 - PowerPoint PPT Presentation

Transcript of Consultando Base de Datos con LINQ en C#

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

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?