InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Linq y Métodos extensores
LINQ con métodos Extensores y expresiones lambda
Métodos Extensores: SELECT
Métodos Extensores: INNER JOIN
También puedes ver ...
TransactionScope - Simplificando el trabajo con transacciones.
LinQ To SQL - Un ejemplo sencillo
Métodos Extensores: INNER JOIN
Métodos Extensores: SELECT
Insertar en una Tabla usando Linq2SQL (Linq To SQL)
Primeros pasos con Linq2SQL (Linq To SQL)
Novedades en C# 3.0 - Primeros pasos con LINQ

Afiliados
La Web del programador
MundoProgramacion


 

LINQ con métodos Extensores y expresiones lambda

LINQ es una serie de extensiones de lenguaje que admite la consulta de datos de forma segura. Está presente en la nueva versión de Visual Studio 2008. Los datos que se deben consultar pueden adoptar la forma de XML (LINQ sobre XML), bases de datos (ADO.NET habilitado para LINQ, que incluye LINQ sobre SQL, LINQ sobre Dataset y LINQ sobre Entidades), objetos (LINQ sobre Objetos), etc. La arquitectura de LINQ se muestra en la siguiente imagen.

En vez de añadir características específicas para el tratamiento de datos relacionales o XML a nuestros lenguajes de programación y motor de ejecución, con el proyecto LINQ hemos seguido un enfoque más general, y estamos añadiendo a .NET Framework facilidades de consulta de propósito general aplicables a todas las fuentes de información, y no solo a los datos relacionales o XML. Esta facilidad se llama ‘Consultas integradas en los lenguajes’ (Language Integrated Query - LINQ).

Utilizamos el término consultas integradas en los lenguajes para indicar que las consultas son una característica integrada del lenguaje de programación principal del desarrollador (por ejemplo C#, Visual Basic). Las consultas integradas en los lenguajes permiten que las expresiones de consulta se beneficien de los metadatos ricos, verificación de sintaxis en tiempo de compilación, tipado estático y ayuda IntelliSense que antes estaban disponibles solo para el código imperativo. Las consultas integradas en los lenguajes también hacen posible aplicar una única facilidad declarativa de propósito general a toda la información en memoria, y no solo a la información proveniente de fuentes externas.

Las consultas integradas en los lenguajes .NET definen un conjunto de operadores de consulta estándar de propósito general que hacen posible que las operaciones de recorrido, filtro y proyección sean expresadas de una manera directa pero declarativa en cualquier lenguaje de programación. Los operadores de consulta estándar permiten aplicar las consultas a cualquier fuente de información basada en IEnumerable<T>. LINQ permite que terceros fabricantes aumenten el conjunto de operadores de consulta estándar, añadiendo los operadores de dominio específico que sean apropiados para el dominio o la tecnología de destino. Más importante aún es que terceros fabricantes también pueden reemplazar los operadores de consulta estándar con sus propias implementaciones que ofrezcan servicios adicionales como la evaluación remota, traducción de consultas, optimización, etc. Al adherirse a los convenios del patrón LINQ, tales implementaciones gozarán de la misma integración en los lenguajes y soporte de herramientas que los operadores de consulta estándar.

La extensibilidad de la arquitectura de consultas es aprovechada por el propio proyecto LINQ para ofrecer implementaciones que operan sobre datos XML y SQL. Los operadores de consulta sobre XML (XLinq) utilizan una facilidad de XML en memoria interna eficiente y fácil de usar para ofrecer funcionalidad XPath/XQuery dentro del lenguaje de programación huésped. Los operadores de consulta sobre datos relacionales (DLinq) se apoyan en la integración de definiciones de esquemas basadas en SQL en el sistema de tipos del CLR. Esta integración ofrece un fuerte control de tipos sobre los datos relacionales, a la vez que mantiene la potencia expresiva del modelo relacional y el rendimiento de la evaluación de las consultas directamente en el almacén de datos subyacente.

LINQ está construido enteramente sobre características de los lenguajes de propósito general, algunas de las cuales son nuevas en C# 3.0 y Visual Basic 9.0. Cada una de estas características tiene su utilidad propia, pero conjuntamente, estas características ofrecen una manera extensible de definir consultas y API de consultas

Expresiones lambda y árboles de expresiones

Muchos operadores de consulta permiten al usuario suministrar una función que realice un filtrado, proyección o extracción de clave. Las facilidades de consulta se apoyan en el concepto de las expresiones lambda, que ofrecen a los desarrolladores una manera conveniente de escribir funciones que pueden ser pasadas como argumentos para su evaluación subsiguiente. Las expresiones lambda son similares a los delegados del CLR y deben adherirse a una firma de método definida por un tipo delegado. 

Métodos extensores

Las expresiones lambda son una parte importante de la arquitectura de consultas. Los métodos extensores son otra. Los métodos extensores combinan la flexibilidad del “tipado de pato” que han hecho populares los lenguajes dinámicos con el rendimiento y la validación en tiempo de compilación de los lenguajes de tipado estático. Mediante los métodos extensores, terceros fabricantes pueden aumentar el contrato público de un tipo con nuevos métodos, permitiendo a la vez a autores de tipos individuales ofrecer su propia implementación especializada de esos métodos.

Los métodos extensores se definen como métodos estáticos en clases estáticas, pero se marcan con el atributo [System.Runtime.CompilerServices.Extension] en los metadatos del CLR. Se propone que los lenguajes ofrezcan una sintaxis directa para los métodos extensores. En C#, los métodos extensores se indican mediante el modificador this aplicado al primer parámetro del método extensor 

La interfaz IQueryable

El mismo modelo de ejecución diferida es generalmente deseado para las fuentes de datos que implementan la funcionalidad de consultas mediante árboles de expresiones, como DLinq. Estas fuentes de datos pueden beneficiarse de implementar la interfaz IQueryable, para la cual todos los operadores de consulta requeridos por el patrón LINQ se implementan utilizando árboles de expresiones. Cada IQueryable tiene una representación de “el código necesario para ejecutar la consulta” en la forma de un árbol de expresión. Todos los operadores de consulta diferidos devuelven un nuevo IQueryable que aumenta ese árbol de expresión con una representación de una llamada a ese operador de consulta. Por esta razón, cuando llega el momento de evaluar la consulta, generalmente porque el IQueryable es enumerado, la fuente de datos puede procesar el árbol de expresión que representa a la consulta entera en un solo “lote”.  

Una vez entendido y leído toda esta parrafada, ha sido un copiar y pegar de la MSDN, paso a poner los ejemplos en real de los diferentes tipos de consulta que se pueden hacer con los métodos extensores:

 

Lo primero de todo he añadido a mi proyecto un “Linq To SQL” con esto te podrás crear tu modelo de objetos a través del modelo de base de datos que tengas en tu gestor de BBDD. El mío con el que hice las pruebas fue el siguiente:


[Ampliar Imagen]

Una de las posibles estructuras que debería tener una llamada a un método extensor sería esta:

 

XDataContext X = new XDataContext();

try

{

//Metodo Extensor

}

catch (Exception E)

{

throw (E);

}

finally

{

if (X != null)

{

X.Connection.Close();

X.Dispose();

}

}

Con esta estructura te aseguras que la conexión nunca se quedará colgada en memoria además de lanzarte la excepción. Otras posibles estructuras más simples a la hora de escribir sería utilizando la instrucción using.

Aclaraciones

  • Utilizaré IQueryable<T> ya que he añadido “Linq To SQL Classes, sino debería utilizar IEnumerable<T>.
  • String CodigoSolicitud = “A03E”;
  • Los métodos extensores nunca mandan una SQL con * en el select sino todos los campos con sinónimos.

Inicio | Linq y Métodos extensores Linq y Métodos extensoresMétodos Extensores: SELECT Versión para imprimir Foros de consulta


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

Título:


Para preguntar utiliza los foros.



Inicio | Linq y Métodos extensores Linq y Métodos extensoresMétodos Extensores: SELECT Versión para imprimir

LINQ con métodos Extensores y expresiones lambda
Autor: David Del Pino Corredor
Visitas: 879 Fecha de publicación: 03/04/2008
David es un Analista/Programador que trabaja en una consultoria. En su experiencia laboral ha tratado con varias tecnologías especialmente con SQL Server 2005 y .NET.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 603 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
MAQUINAS VIRTUALES por victor ... [WIN 98/NT/2000/XP] 0 19/08/2008
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/2008

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 ...
09/10/2006 Cadenas de texto    forma parte de...Tutorial C#
22/10/2005 Tablas    forma parte de...Tutorial SQL
09/08/2007 Como mostrar el formato de fecha corta en un gridView
02/09/2007 Procedimientos almacenados en Transact SQL    forma parte de...Tutorial de Transact SQL
25/08/2007 Variables en Transact SQL    forma parte de...Tutorial de Transact SQL
03/10/2006 Introduccion a C#    forma parte de...Tutorial C#
21/02/2007 BULK COLLECT    forma parte de...Tutorial PL/SQL
28/08/2006 Ubuntu en VmWare con VMware Tools
11/06/2008 Problemas con el diseñador Web de Visual Studio 2008
03/10/2006 Creación de objetos    forma parte de...Tutorial C#

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]