InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
Creando cadenas de conexión ConnectionStrings en .net 3.5 o visual Studio 2008 usando SqlConnectionStringBuilder
Migración de WSE a WCF (Web Services de 2005 a 2008)
Generar archivos PDF con C#
TransactionScope - Simplificando el trabajo con transacciones.
LinQ To SQL - Un ejemplo sencillo
Cómo activar Intelisense (autocompletado) en el Web.config
Leer un campo XML de SQL Server 2005 con C#
TripleDES - Un ejemplo practico en C#
Mostrar un GridView dentro de un DataList
String.Format

Afiliados
La Web del programador
MundoProgramacion


 

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: 1824 Fecha de publicación: 30/12/2007
Pedro Herrarte, es consultor independiente, ofreciendo sercivios 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: 132 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 56 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 172 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 705 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 176 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 618 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista
Visitas: 404 | Comentarios: 0 | Archivo: Articulos
Categorias: Linux|BSD
Visitas: 213 | Comentarios: 0 | Archivo: Articulos
Categorias: Programación|Actualidad
18/08/2008 SQL Server 2008
Visitas: 1029 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 728 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ

Útimos temas recibidos en los foros ...
Crear una sesion de inicio por jhors ... [ASP.NET] 1 06/10/2008
Enviar email a correos cmo hotmail por Cajami ... [C#] 13 06/09/2007
Como mandar mensaje a Celular por Pako ... [C#] 23 13/03/2007
Casting por sara ... [Java] 1 06/10/2008
ORA-22288: file or LOB operation GetLength failed por heroga ... [ORACLE] 1 05/08/2008
Galeria de imagenes en Visual Web Developer por luis ... [ASP.NET] 0 06/10/2008
utilizar un ObjectDataSource por mari90 ... [ASP.NET] 4 25/10/2006
Llamar procedimientos almacenados por elmago ... [C#] 1 04/10/2008
Procesos huerfanos por cesarf283 ... [SQL Server] 2 11/07/2007
numero autogenerado por lucho ... [Visual Basic .NET] 17 10/01/2007
PUNTO DE VENTA por TIBURON ... [Access] 0 04/10/2008
Curso Visual Basic .NET en vídeo por martaz ... [Visual Basic .NET] 4 08/11/2007

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 ...
17/10/2006 Excepciones personalizadas en PL/SQL    forma parte de...Tutorial PL/SQL
10/06/2007 Multiples escritorios en Windows XP
19/09/2007 Triggers en Transact SQL    forma parte de...Tutorial de Transact SQL
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
19/10/2005 Configurar el IIS para ejecutar aplicaciones ASP.net
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL
29/04/2008 Leer un campo XML de SQL Server 2005 con C#
28/06/2006 Excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
08/09/2007 Funciones en Transact SQL    forma parte de...Tutorial de Transact SQL
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]