consultando base de datos con linq en c#

28
Consultando Base de Datos con LINQ en C# Richard Jiménez V. Empresas América www.empresas-america.com linqucatec.wordpress.com

Upload: ashton

Post on 22-Feb-2016

97 views

Category:

Documents


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

Page 1: 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

Page 2: Consultando Base  de   Datos  con LINQ  en C#

¿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

Page 3: Consultando Base  de   Datos  con LINQ  en C#

¿Quiénes son Uds?

¿Conoces C#?¿Lenguaje SQL?¿Base de datos?

Page 4: Consultando Base  de   Datos  con LINQ  en C#

¿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

Page 5: Consultando Base  de   Datos  con LINQ  en C#

Cambiando de Perspectiva …

Page 6: Consultando Base  de   Datos  con LINQ  en C#

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.

Page 7: Consultando Base  de   Datos  con LINQ  en C#

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

Page 8: Consultando Base  de   Datos  con LINQ  en C#

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)

Page 9: Consultando Base  de   Datos  con LINQ  en C#

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

Page 10: Consultando Base  de   Datos  con LINQ  en C#

¿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.

Page 11: Consultando Base  de   Datos  con LINQ  en C#

LINQ es:

Tipos fuertesBeneficios del IntelliSense

Language INtegrated Queries

Colecciones de objectsDatos relacionalesXML

Queries integrados en el código (C#/VB)

Queries Unificados

Page 12: Consultando Base  de   Datos  con LINQ  en C#

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.

Page 13: Consultando Base  de   Datos  con LINQ  en C#

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;

Page 14: Consultando Base  de   Datos  con LINQ  en C#

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?

Page 15: Consultando Base  de   Datos  con LINQ  en C#

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

Page 16: Consultando Base  de   Datos  con LINQ  en C#

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

Page 17: Consultando Base  de   Datos  con LINQ  en C#

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

Page 18: Consultando Base  de   Datos  con LINQ  en C#

DEMOHello LINQ

Page 19: Consultando Base  de   Datos  con LINQ  en C#

Agenda

Acceso a Datos en EvoluciónEntendiendo LINQ to SQLEntendiendo LINQ to XML

Page 20: Consultando Base  de   Datos  con LINQ  en C#

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

Page 21: Consultando Base  de   Datos  con LINQ  en C#

DEMOExplorando LINQ to SQL

Page 22: Consultando Base  de   Datos  con LINQ  en C#

Agenda

Acceso a Datos en EvoluciónEntendiendo LINQ to SQLEntendiendo LINQ to XML

Page 23: Consultando Base  de   Datos  con LINQ  en C#

Beneficios de LINQ to XML

No hay barrera conceptual XML vs. code

Aprovecha experiencia con DOM

Facilita los requerimientos de compatibilidad

Page 24: Consultando Base  de   Datos  con LINQ  en C#

Objetos de Ayuda LINQ to XML

XDocumentXNamespaceXCommentXElementXAttribute

Page 25: Consultando Base  de   Datos  con LINQ  en C#

DEMOTrabajando con Datos XML

Page 27: Consultando Base  de   Datos  con LINQ  en C#

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

Page 28: Consultando Base  de   Datos  con LINQ  en C#

PREGUNTAS?