InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
SubVersion y Visual Studio
Encriptación con AES Rijndael - Ejemplo
TripleDES - Un ejemplo practico en C#
Insertar una marca de agua en documentos PDF
Serialización: XmlSerializer y BinaryFormater
Handler para manipular imagenes
Conversiones de tipos personalizadas (VB y C#)
Compresión por gzip y deflate
La página Web que está abriendo contiene tanto elementos seguros como no seguros.
SQL to LINQ


Novedades en C# 3.0 - Primeros pasos con LINQ

   La nueva versión de C# y el framework .NET 3.5 vienen cargadas de novedades, pero sin duda la más atractiva es la inclusión del lenguaje consultas integrado, LINQLINQ nos permite homogeneizar el lenguaje y la forma en la que accedemos a los datos independientemente de donde estén ubicados estos.

    El objetivo de Microsoft con LINQ es conseguir abstraer al programador de la capa de persistencia de datos, para que pueda programar en un único lenguaje y se centre en el tratamiento de los datos y no en como manipularlos. Me explico, cuando trabajamos con bases de datos relacionales, utilizamos SQL para obtener y manipular los datos, para ello es necesario que el programador conozca SQL. Si trabajamos con XML debemos conocer XQuery-Xpath, y así con cada uno de los posibles repositorios de datos.

    La idea que subyace detrás de LINQ es que el programador solo tenga que conocer un único lenguaje y pueda con ese único lenguaje consultar y manipular los datos sin tener que preocuparse de si está trabajando con una base de datos, una colección en memoria, un archivo XML ... En cada caso utilizaremos un proveedores especifico (LINQ to Objects, LINQ to SQL, LINQ to XML ...) pero siempre de forma transparente al programador.

    Imaginemos que tenemos obtener, a partir de una colección en memoria que contiene personas, las personas cuya edad sea mayor a cinco años, y que además queremos el resultado ordenado por el nombre y apellidos de la persona. La siguiente consulta LINQ hará el trabajo por nosotros.


var
querypersona = from p in personas

where p.Edad>5

orderby p.Nombre, p.Apellido1, p.Apellido2

select p;

     Ya explicaremos más adelante que es el tipo var de retorno de la expresión - de momento solo adelantaremos que no tiene nada que ver con el tipo Variant de Visual Basic.

    Otra de las grandes ventajas de trabajar con LINQ es que el compilador valida que la expresión es correcta previniendonos de errores en tiempo de ejecución.

    Vamos a hacer un pequeño ejemplo para ilustrar esto, en nuestro caso el proveedor que utilizaremos será LINQ to Objects, que nos permite consultar cualquier array o coleccion que implemente la interfaz IEnumerable<T>. Lo primero es incluir las referencias en nuestro programa - si trabajamos con Visual Studio 2008 se incluyen automáticamente.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

    Definimos una clase, Persona, muy simple para representar las personas del ejemplo, posteriormente crearemos una colección de personas y ejecutaremos una consulta LINQ.


class
Persona

{

public string Nombre { get; set; }

 

public string Apellido1 { get; set; }

 

public string Apellido2 { get; set; }

 

public DateTime FechaNacimiento { get; set; }


 

public int Edad

{get
{

if (FechaNacimiento == null)

{

throw new Exception (

"Para calcular la edad es necesaria la fecha de nacimiento.");

}

var dia = DateTime.Now;

return (int)dia.Subtract(FechaNacimiento).TotalDays/365;

}

}

}

    Obsérvese la nueva forma abreviada de declarar propiedades, otra de las novedades de C# 3.0, es el propio compilador quien se encarga de crear un método privado para encapsular el acceso a la propiedad. Por supuesto podemos seguir escribiendo propiedades como lo hacíamos en versiones anteriores de C#, esta nueva forma es solo "azúcar sintáctico" destinado a facilitarnos la vida.

    A continuación, crearemos una coleccion List<T> de personas - que implementa IEnumerable<T> y que por lo tanto nos va a permitir ejecutar consultas LINQ.


List
<Persona> personas = new List<Persona>

{

new Persona

{

Nombre = "Pedro",

Apellido1 = "Herrarte",

Apellido2 = "Apellido 2",

FechaNacimiento = new DateTime(1975,5,13)

},

new Persona

{

Nombre = "Alicia",

Apellido1 = "Alonso",

Apellido2 = "Apellido 2",

FechaNacimiento = new DateTime(1977, 2,19)

},

new Persona

{

Nombre = "Aitor",

Apellido1 = "Apellido 1",

Apellido2 = "Apellido 2",

FechaNacimiento = new DateTime(2003,8,25)

},

new Persona

{

Nombre = "Ariana",

Apellido1 = "Apellido 1",

Apellido2 = "Apellido 2",

FechaNacimiento = new DateTime(2007,10,18)

}

};

    Otra de las novedades de C# 3.0, la forma de inicializar las colecciones y las clases que la componen. De nuevo mas "azúcar sintáctico".

    Una vez que tenemos nuestra colección de Personas ya podemos ejecutar la consulta LINQ, de la siguiente forma.


var
querypersona = from p in personas

where p.Edad>5

orderby p.Nombre, p.Apellido1, p.Apellido2

select p;

    Otra novedad es el tipo de retorno de la consulta var, no se trata de un tipo "variant" ni nada por el estilo. Cuando ejecutamos consultas LinQ podemos devolver un tipo existente (como el ejemplo anterior), o un tipo completamente nuevo como en el siguiente ejemplo en el que incluimos una nueva propiedad NombreCompleto - que se construye con una expresión C# (String.Format).

 

var querypersona = from p in personas

where p.Edad>5

orderby p.Nombre, p.Apellido1, p.Apellido2

select new

{

p.Nombre,

p.Apellido1,

p.Apellido2,

p.Edad,

NombreCompleto =
String.Format("{0} {1} {2}", p.Nombre,
p.Apellido1,

p.Apellido2)

};

    El tipo de la variable es definido por el compilador en tiempo de compilación, manteniendo así una de la caracteristicas princiapales de C# - ser un lenguaje fuertemente tipado. A este forma de determinar el tipo de una variable se le conoce como "inferencia de tipos".

    Nuestro sencillo programa acaba mostrando en pantalla el resultado de nuestra consulta.


foreach
(var p in querypersona)

{

Console.WriteLine(
"El nombre de la persona es {0}, y su edad es de {1} años.",

p.NombreCompleto, p.Edad);

}

Console.Read();

    Este articulo es una simple introducción a LINQ y sus posibilidades, se trata de un tema muy amplio y con grandisimas posibilidades que sin duda va a cambiar (para bien) nuestra forma de trabajar con C# y en general con la plataforma .NET. Iremos escribiendo mas cosillas sobre LINQ ...

    Saludos, DJK

 


 Versión para imprimir  Foros de consulta

 
3.5 por aldeamedia
Respuesta recibida el [19/01/2008 03:04:42]
Una pequeña puntilla, Linq está incluido en el Framework 3.5 no en el 3.0 , en el 3.0 están WF,WCF y cardspace, en el 3.5 linq y Ajax

 
Querido Pablo. Una cosa es C# ... por Devjoker
Respuesta recibida el [19/01/2008 05:50:39]
Querido Pablo. Una cosa es C# 3.0 y otra los frameworks 3.0 y 3.5.
Linq está incluido con C# 3.0, en el .NET Framework 3.5.
Primera linea del articulo:
"La nueva versión de C# y el framework .NET 3.5 vienen cargadas de novedades..."

 
Sociate. Esta bueno el ejem... por Mario
Respuesta recibida el [31/01/2008 04:18:33]
Sociate.

Esta bueno el ejemplo, pero sería interesante ver alguno con xml o con db, ejecutando sp.

PD. Parece que el otro socio no esta muy informado, pero igual opina!!!

salu2

 
Linq To Sql por Devjoker
Respuesta recibida el [31/01/2008 04:42:51]
http://www.devjoker.com/contenidos/Articulos/326/LinQ-To-SQL--Un-ejemplo-sencillo.aspx

 
FGFG por GHG
Respuesta recibida el [05/05/2008 05:52:57]
FGHFHGFHFGHGFHFGHFFGGF
HF
GH
FG
H

 
Sociate informado estoy, te aseguro por aldeamedia
Respuesta recibida el [06/05/2008 02:31:19]
Sociate te aseguro que informado estoy que estoy aburrido hablar de las novedades del framework todos los dias.

Otra cosa es que tenga razón Pedro y que le haya leido mal, de tanto repetir que linq es del framework 3.5 no me he dado cuenta que Pedro hablaba del lenguaje y no del Framework :) pero eso es otra cosa

Si te fijas decimos lo mismo sólo que yo no le había leido bién y me he hecho un lio entre el título y la entradilla y he leido 3,0 dos veces, cierto pero no me referenciéis a mal!! :(


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Novedades en C# 3.0 - Primeros pasos con LINQ
Autor: Pedro Herrarte Sánchez
Visitas: 5252 Fecha de publicación: 30/12/2007
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 81 | Comentarios: 2 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 786 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 725 | Comentarios: 3 | Archivo: Articulos
Visitas: 3116 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14470 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1462 | Comentarios: 3 | Archivo: Articulos
Visitas: 688 | Comentarios: 2 | Archivo: Articulos
Visitas: 367 | Comentarios: 0 | Archivo: Articulos
Visitas: 1983 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
certificado de afiliación de pensiones y cesantias por secre ... [Actualidad] 107 28/01/2010
Certificadoo por Francy ... [Actualidad] 0 10/03/2010
FORMULARIO ACCESS por jcifuentes ... [Access] 34 29/05/2007
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 119 12/01/2010
Certificado por Francy ... [Actualidad] 0 10/03/2010
certificado de pensión y ses antias por hernan ... [Actualidad] 0 10/03/2010
Certificado de Penciones Horizonte por orlandossa ... [Actualidad] 4 09/02/2010
fondo de pensiones por mafe ... [Access] 0 10/03/2010
certificado del fondo de pensiones cc 10.491.465 santander de Q. por carlos andres cifuentes banguero ... [Actualidad] 9 17/02/2010
certificado de semanas cotisadaz por lis ... [Actualidad] 0 10/03/2010
certificado por arme ... [Actualidad] 0 10/03/2010
Quiero saber a que fondo de pensiones estoy afiliada por clau ... [Actualidad] 169 24/07/2009

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL
21/02/2007 Subconsultas    forma parte de...Tutorial SQL
28/07/2007 Drivers y Plugins para conectar mySQL con Visual Studio y .net
13/04/2008 String.Format
23/05/2006 Cursores en PL/SQL    forma parte de...Tutorial PL/SQL
09/10/2006 Variables y tipos de datos    forma parte de...Tutorial C#
22/10/2005 Componentes del lenguaje SQL    forma parte de...Tutorial SQL
13/01/2007 Atributos condicionales    forma parte de...Tutorial C#
01/01/2006 Consultas agregadas    forma parte de...Tutorial SQL
19/10/2006 Llamadas asíncronas    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]