Usar LINQ en C#

Actualización: noviembre 2007

Es muy común que las aplicaciones utilicen datos en bases de datos SQL o documentos XML. Tradicionalmente, los programadores tenían que aprender un lenguaje de programación primario, como C#, y uno secundario, como SQL o XQuery. Language-Integrated Query (LINQ) incorpora capacidades de consulta al lenguaje C# propiamente dicho. Ahora, en lugar de aprender un lenguaje de consulta independiente, puede utilizar sus conocimientos de C#, junto con algunas palabras clave y conceptos adicionales, para consultar bases de datos SQL, conjuntos de datos ADO.NET, documentos XML y cualquier clase de colección .NET que implemente la interfaz IEnumerable.

Ventajas de utilizar LINQ

  • Sintaxis familiar para escribir consultas.

  • Comprobación en tiempo de compilación de errores de sintaxis y seguridad de tipos.

  • Compatibilidad mejorada con el depurador.

  • Compatibilidad con IntelliSense.

  • Capacidad para trabajar directamente con elementos XML en lugar de crear un documento XML contenedor, que es lo que se requiere en W3C DOM.

  • Modificación de documentos XML en memoria de gran eficacia, aún más fácil de usar que XPath o XQuery.

  • Funciones de filtrado, ordenación y agrupación eficaces.

  • Modelo coherente para trabajar con datos en varios tipos de formatos y orígenes de datos.

Mejoras del lenguaje C# que admiten LINQ

A continuación, se muestran una serie de estructuras de lenguaje nuevas que se han agregado a C# 3.0 por cuestiones de compatibilidad con LINQ:

Estructura de lenguaje

Description

expresiones de consulta

Sintaxis de consulta declarativa que se utiliza para consultar datos de cualquier origen de datos habilitado para LINQ. Para obtener más información, vea Expresiones de consultas con LINQ (Guía de programación de C#) y Características de C# 3.0 compatibles con LINQ.

variables con tipo implícito

Variable especificada con el modificador var, que permite que el compilador infiera el tipo de la variable. Para obtener más información, vea Variables locales con asignación implícita de tipos (Guía de programación de C#) y Características de C# 3.0 compatibles con LINQ.

inicializadores de objeto

Habilita la inicialización de objetos sin llamar explícitamente a un constructor para el objeto. Para obtener más información, consulte Inicializadores de objeto y de colección (Guía de programación de C#) y Características de C# 3.0 compatibles con LINQ.

tipos anónimos

Permite que el compilador cree objetos sin necesidad de que el usuario especifique un tipo de datos con nombre. El nombre de tipo sólo está disponible para el compilador. Para obtener más información, consulte Tipos anónimos (Guía de programación de C#) y Características de C# 3.0 compatibles con LINQ.

métodos de extensión

Habilita la extensión de cualquier tipo existente mediante la asociación de métodos estáticos al tipo. Para obtener más información, consulte Características de C# 3.0 compatibles con LINQ.

expresiones lambda

Bloque insertado de instrucciones o expresiones que puede utilizarse en cualquier lugar donde se espere un tipo delegado.

Para obtener más información, consulte Expresiones lambda (Guía de programación de C#) y Características de C# 3.0 compatibles con LINQ.

Escribir consultas LINQ

Tanto si trabaja con conjuntos de datos ADO.NET, bases de datos SQL, colecciones .NET o documentos XML, la estructura básica de una expresión de consulta LINQ es la misma. Una expresión de consulta comienza con una cláusula from, seguida de cláusulas de consulta, como where, orderby, select, etc. La expresión completa se almacena en una variable de consulta que puede ejecutarse o modificarse las veces que sean necesarias. La sintaxis de la expresión de consulta se parece a la sintaxis de SQL. Por ejemplo, puede utilizar la sintaxis siguiente para escribir una consulta LINQ que devuelva todos los alumnos de una base de datos students que tienen science como asignatura principal:

IEnumerable<Student> studentQuery =

from student in studentApp.students

where student.Major == "Science"

select student;

Para obtener más información sobre las expresiones de consulta, vea Operaciones básicas de consulta (LINQ), Introducción a consultas con LINQ y Tutorial: Escribir consultas en C# (LINQ).

LINQ to Objects

La frase LINQ to Objects, hace referencia al uso de LINQ para consultar recolecciones de datos en memoria, como las clases de los espacios de nombres System.Collections y System.Collections.Generic. Estas clases incluyen ArrayList, List<T>, Dictionary<K,T>, etc. Es posible consultar matrices porque admiten IEnumerable<T> de forma implícita. Para obtener más información, consulte LINQ to Objects.

Incluso puede importar un archivo de texto en estructuras de datos enumerables y ejecutar consultas para ordenar o filtrar su contenido. Para consultar un ejemplo, vea Cómo: Realizar un recuento de las repeticiones de una palabra en una cadena (LINQ).

LINQ to SQL

Utilice LINQ to SQL para tener acceso a bases de datos de SQL Server y SQL Server Express a través de una capa de objeto con establecimiento inflexible de tipos que cree utilizando Diseñador relacional de objetos.

Puede utilizar Diseñador relacional de objetos para asignar clases LINQ to SQL a tablas de una base de datos y, a continuación, escribir consultas LINQ para enlazar datos a controles de la aplicación. Por ejemplo, la siguiente consulta LINQ enlaza los resultados de una consulta LINQ (todos los clientes de Estados Unidos) al origen de enlace de un control DataGridView.

var CustomersQuery = from customers in northwindSampleDataContext1.Customers
                      where customers.Country == "US"
                      select customers;
customerBindingSource.DataSource = CustomersQuery;

Para obtener más información, vea LINQ to SQL, Información general sobre el Diseñador relacional de objetos, Tutorial: Crear clases de LINQ to SQL (Diseñador relacional de objetos) y Cómo: Agregar clases de LINQ to SQL a un proyecto (Diseñador relacional de objetos).

Nota:

Actualmente, Diseñador relacional de objetos no admite bases de datos de SQL Server Compact 3.5. Para obtener información sobre cómo obtener SQL Server Express, consulte la sección Obtener SQL Server Express de Cómo: Instalar bases de datos de ejemplo.

LINQ to DataSet

DataSet se utiliza para enlazar datos a los controles de una aplicación. En lugar de conectarse directamente a la base de datos, DataSet habilita una aplicación para que utilice subconjuntos de varios orígenes de datos o datos sin conexión (almacenados en caché). Al conectar la aplicación, los cambios realizados en DataSet pueden actualizarse en la base de datos.

LINQ to DataSet realiza consultas en datos almacenados en caché de forma más rápida y sencilla que los métodos de filtrado y ordenación disponibles para un DataSet. Para obtener más información, consulte LINQ to DataSet.

LINQ to XML

LINQ to XML permite crear y modificar documentos XML con facilidad, utilizando expresiones de consulta LINQ en lugar de XPath o XQuery. LINQ to XML es una nueva API de programación XML en memoria que usa construcciones de programación modernas en lugar del Modelo de objetos de documento (DOM) de W3C. Para obtener más información, vea Diferencias entre LINQ to XML y DOM, LINQ to XML e Información general de las clases LINQ to XML.

Vea también

Conceptos

Introducción (LINQ to SQL)

Otros recursos

Introducción a LINQ en C#

Introducción (LINQ to DataSet)

Introducción (LINQ to XML)